创建自定义特性 (C#)
可通过定义特性类创建自己的自定义特性,特性类是直接或间接派生自 Attribute 的类,可快速轻松地识别元数据中的特性定义。 假设希望使用编写类型的程序员的姓名来标记该类型。 可能需要定义一个自定义 Author
特性类:
[System.AttributeUsage(System.AttributeTargets.Class |
System.AttributeTargets.Struct)
]
public class AuthorAttribute : System.Attribute
{
private string name;
public double version;
public AuthorAttribute(string name)
{
this.name = name;
version = 1.0;
}
}
类名 AuthorAttribute
是该特性的名称,即 Author
加上 Attribute
后缀。 由于该类派生自 System.Attribute
,因此它是一个自定义特性类。 构造函数的参数是自定义特性的位置参数。 在此示例中,name
是位置参数。 所有公共读写字段或属性都是命名参数。 在本例中,version
是唯一的命名参数。 请注意,使用 AttributeUsage
特性可使 Author
特性仅对类和 struct
声明有效。
可按如下方式使用这一新特性:
[Author("P. Ackerman", version = 1.1)]
class SampleClass
{
// P. Ackerman's code goes here...
}
AttributeUsage
有一个命名参数 AllowMultiple
,通过此命名参数可一次或多次使用自定义特性。 下面的代码示例创建了一个多用特性。
[System.AttributeUsage(System.AttributeTargets.Class |
System.AttributeTargets.Struct,
AllowMultiple = true) // multiuse attribute
]
public class AuthorAttribute : System.Attribute
在下面的代码示例中,某个类应用了同一类型的多个特性。
[Author("P. Ackerman", version = 1.1)]
[Author("R. Koch", version = 1.2)]
class SampleClass
{
// P. Ackerman's code goes here...
// R. Koch's code goes here...
}