本当は怖くない属性の実
装
くろいえのぐ とは

PHPer。
MODX CMSの話とかします
人狼ゲームを改造しました
属性とは
[Hoge(100, Huga = false)]
public class Foo {
}

●

メタデータ

●

アセンブリに書き込まれる
属性とは

●

メタデータ

●

アセンブリに書き込まれる
属性の用途
●

コンパイラへのヒン
ト

●

ユニットテスト

●

データ検証

●

シリアル化の制御

[STAThread]
[Obsolete(“使用禁止”)]
[TestFixture]
[Test]
[Required]
[R...
属性の取得
●

MemberInfo.GetCustomAttributesメソッド

●

型の制約

●

継承元の属性を含める
var type = value.GetType();
var attr = type.GetCustomA...
属性の取得
●

MemberInfo.GetCustomAttributesメソッド

●

型の制約

●

継承元の属性を含める
var type = value.GetType();
var attr = type.GetCustomA...
_人人人人人人人人人_
> 属性はつくれる <
 ̄Y^ Y^ Y^ Y^ Y^ Y^ Y^ Y ̄
定義のコツ
●

●

●

●

Attributeクラスを継承

[AttributeUsage(
AttributeTarget.Property,

クラス名は*Attribute
AttributeUsageを添付
プロパティはプリミ...
クラス定義
[AttributeUsage(
AttributeTarget.Property,
●

●

●

Attributeクラスを継承
クラス名は*Attribute
末尾のAttributeは使用
時には省略できる

Inheri...
AttributeUsage
[AttributeUsage(
AttributeTarget.Property,
●

●

継承先でも取得でき
る
複数同時に添付でき
る

Inherited = true,
AllowMultiple =...
コンストラクタ引数とプ
ロパティ
[AttributeUsage(
●

コンストラクタ引数
=必須入力
–

●

AttibuteTarget

プロパティ
=名前を指定して入
力
–

●

Inherited = true,
Allow...
実際に作ってみた
ありがとうございました
Upcoming SlideShare
Loading in...5
×

本当は怖くない属性の自作

715

Published on

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
715
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

本当は怖くない属性の自作

  1. 1. 本当は怖くない属性の実 装
  2. 2. くろいえのぐ とは PHPer。 MODX CMSの話とかします 人狼ゲームを改造しました
  3. 3. 属性とは [Hoge(100, Huga = false)] public class Foo { } ● メタデータ ● アセンブリに書き込まれる
  4. 4. 属性とは ● メタデータ ● アセンブリに書き込まれる
  5. 5. 属性の用途 ● コンパイラへのヒン ト ● ユニットテスト ● データ検証 ● シリアル化の制御 [STAThread] [Obsolete(“使用禁止”)] [TestFixture] [Test] [Required] [Range(1, 100)] [XmlElement] [XmlAttribute] [XmlIgnore]
  6. 6. 属性の取得 ● MemberInfo.GetCustomAttributesメソッド ● 型の制約 ● 継承元の属性を含める var type = value.GetType(); var attr = type.GetCustomAttributes( typeof(HogeAttribute), true ).FirstOrDefault();
  7. 7. 属性の取得 ● MemberInfo.GetCustomAttributesメソッド ● 型の制約 ● 継承元の属性を含める var type = value.GetType(); var attr = type.GetCustomAttributes( typeof(HogeAttribute), true ).FirstOrDefault();
  8. 8. _人人人人人人人人人_ > 属性はつくれる <  ̄Y^ Y^ Y^ Y^ Y^ Y^ Y^ Y ̄
  9. 9. 定義のコツ ● ● ● ● Attributeクラスを継承 [AttributeUsage( AttributeTarget.Property, クラス名は*Attribute AttributeUsageを添付 プロパティはプリミティ ブ型 Inherited = true, AllowMultiple = true )] public class HogeAttribute : Attribute { public bool Huga { get; set; } public HogeAttribute( int piyo) { ...
  10. 10. クラス定義 [AttributeUsage( AttributeTarget.Property, ● ● ● Attributeクラスを継承 クラス名は*Attribute 末尾のAttributeは使用 時には省略できる Inherited = true, AllowMultiple = true )] public class HogeAttribute : Attribute { } public bool Huga { get; set; public HogeAttribute( int piyo) { ...
  11. 11. AttributeUsage [AttributeUsage( AttributeTarget.Property, ● ● 継承先でも取得でき る 複数同時に添付でき る Inherited = true, AllowMultiple = true )] public class HogeAttribute : Attribute { } public bool Huga { get; set; public HogeAttribute( int piyo) { ...
  12. 12. コンストラクタ引数とプ ロパティ [AttributeUsage( ● コンストラクタ引数 =必須入力 – ● AttibuteTarget プロパティ =名前を指定して入 力 – ● Inherited = true, AllowMultiple = true )] public class HogeAttribute : Attribute { } Inherited – AttributeTarget.Property, AllowMultiple プリミティブ型だ public bool Huga { get; set; public HogeAttribute( int piyo) { ...
  13. 13. 実際に作ってみた
  14. 14. ありがとうございました
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×