プロパティAttributeUsage

2931 ワード

プロパティAttributeUsageの概要:
  AttributeUsage属性(第17.4.1節)は、属性クラスの使用方法を記述するために使用される.AttributeUsageは、属性クラスがその宣言に使用できるように指定できる位置決めパラメータ(第17.1.2節)を有する.例
using System;

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface)]

public class SimpleAttribute: Attribute 

{

   ...

}
SimpleAttributeという名前の属性クラスが定義されています.この属性クラスはクラス宣言とインタフェース宣言にのみ配置できます.例
[Simple] class Class1 {...}

[Simple] interface Interface1 {...}
Simple属性のいくつかの用法を示した.この属性は名称SimpleAttributeで定義されているが、使用時にはAttribute接尾辞を省略してSimpleと略称することができる.したがって、上記の例は意味的に次のように等価です.
[SimpleAttribute] class Class1 {...}

[SimpleAttribute] interface Interface1 {...}
AttributeUsageには、特定のエンティティについてこの属性を複数回使用できるかどうかを示すAllowMultipleという名前のパラメータ(第17.1.2節)もあります.属性クラスのAllowMultipleがtrueの場合、この属性クラスは多重属性クラスであり、1つのエンティティに複数回適用することができる.属性クラスのAllowMultipleがfalseまたは指定されていない場合、この属性クラスは使い捨て属性クラスであり、1つのエンティティで最大1回しか使用できません.
using System;

[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]

public class AuthorAttribute: Attribute

{ 

   private string name;

   public AuthorAttribute(string name) {

      this.name = name;

   }

   public string Name { 

      get { return name; } 

   }

}
AuthorAttributeという名前のマルチプロパティクラスが定義されています.例
[Author("Brian Kernighan"), Author("Dennis Ritchie")] 

class Class1

{

   ...

}
Authorプロパティを2回使用したクラス宣言が表示されます.AttributeUsageには、ベースクラスで属性を指定したときに、このベースクラスから派生したクラスにも継承されるかどうかを示すInheritedという名前のパラメータがあります.属性クラスのInheritedがtrueの場合、その属性は継承されます.属性クラスのInheritedがfalseまたは指定されていない場合、その属性は継承されません.AttributeUsage属性が付加されていない属性クラスX、例えば
using System;

class X: Attribute {...}

次のようになります.
using System;

[AttributeUsage(

   AttributeTargets.All, 

   AllowMultiple = false, 

   Inherited = true)

]

class X: Attribute {...}