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

1,075 views

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
1,075
On SlideShare
0
From Embeds
0
Number of Embeds
329
Actions
Shares
0
Downloads
3
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. ありがとうございました

×