确定可以如何使用自定义属性类。AttributeUsage 是一个可应用于自定义属性定义的属性,自定义属性定义来控制如何应用新属性。显式应用的默认设置与此类似:
复制代码 | |
|---|---|
[System.AttributeUsage(System.AttributeTargets.All,
AllowMultiple=false,
Inherited=true)]
class NewAttribute : System.Attribute { } | |
在本例中,NewAttribute 类可应用于任何支持属性的代码实体,但是对每个实体只可应用一次。当应用于基类时,它可由派生类继承。
AllowMultiple 和 Inherited 参数是可选的,所以此代码具有相同的效果:
复制代码 | |
|---|---|
[System.AttributeUsage(System.AttributeTargets.All)]
class NewAttribute : System.Attribute { } | |
第一个 AttributeUsage 参数必须是
复制代码 | |
|---|---|
using System;
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
class NewPropertyOrFieldAttribute : Attribute { } | |
如果 AllowMultiple 参数设置为 true,则返回属性可对单个实体应用多次,如下例所示:
复制代码 | |
|---|---|
using System;
[AttributeUsage(AttributeTargets.Class, AllowMultiple=true)]
class MultiUseAttr : Attribute { }
[MultiUseAttr][MultiUseAttr]
class Class1 { }
[MultiUseAttr, MultiUseAttr]
class Class2 { } | |
在这种情况下,由于 AllowMultiple 设置为 true,MultiUseAttr 可反复应用。所示的应用多个属性的这两种格式均有效。
如果 Inherited 设置为 false,则该属性不由从属性化的类派生的类继承。例如:
复制代码 | |
|---|---|
using System;
[AttributeUsage(AttributeTargets.Class, Inherited=false)]
class Attr1 : Attribute { }
[Attr1]
class BClass { }
class DClass : BClass { } | |
在这种情况下,Attr1 不通过继承应用于 DClass。