AttributeUsage是一个用于指定自定义属性的使用规范的特性类。通过使用AttributeUsage特性,可以限制自定义属性只能应用于特定的程序元素,例如类、方法、字段等。
AttributeUsage特性有三个参数:
1. ValidOn:指定自定义属性可以应用的程序元素类型。可以通过多个参数值进行组合,常用的参数值包括:AttributeTargets.Assembly(程序集)、AttributeTargets.Class(类)、AttributeTargets.Method(方法)、AttributeTargets.Property(属性)、AttributeTargets.Field(字段)等。
2. AllowMultiple:指定自定义属性是否可以多次应用于同一个程序元素。如果设置为true,则可以多次应用;如果设置为false,则只能应用一次。默认值为false。
3. Inherited:指定自定义属性是否可以被继承。如果设置为true,则子类会继承父类的属性;如果设置为false,则子类不会继承父类的属性。默认值为true。
下面是一个示例代码:
```csharp
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class CustomAttribute : Attribute
{
// 自定义属性的代码逻辑
}
[Custom] // 只能应用于类和方法
public class MyClass
{
[Custom] // 只能应用于类和方法
public void MyMethod()
{
// 方法的代码逻辑
}
}
```
在上述示例中,CustomAttribute只能应用于类和方法,且不能多次应用。同时,该属性会被子类继承。因此,MyClass类和MyMethod方法都可以应用CustomAttribute。