プロパティ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 {...}