C# Attribute
[AttributeUsageAttribute(AttributeTarget.All), AllowMultiple = true, Inherited = true] class MyNewAttribute: System.Attribute { // }
特性,就是为目标元素,可以是数据集、模块、类、属性、方法、甚至函数参数等加入附加信息,类似于注释,但是可以在运行期以反射的方式获得。定制特性主要应用在序列化、编译器指令、设计模式等方面。
多个特性可以应用于同一元素,特性间以逗号隔开,以下表达规则有效:[AttributeUsage][ Flags]、[AttributeUsage, Flags]、[Flags, AttibuteUsageAttribute]、[AttributeUsage(), FlagesAttribute()]
attibute实例,是在编译期进行初始化,而不是运行期。
C#允许以指定的前缀来表示特性所应用的目标元素,建议这样来处理,因为显式处理可以消除可能带来的二义性。例如:
namespace Anytao.net { [assembly: MyAttribute(1)] //应用于程序集 [moduel: MyAttribute(2)] //应用于模块 pubic class Attribute_how2do { // } }
AttributeUsageAttribute特性的作用:Specifies the usage of another attribute class.
往往在定义新特性时应用以前的特性。
[AttributeUsageAttribute(AttributeTarget.All), AllowMultiple = true, Inherited = true] class MyNewAttribute: System.Attribute { // }
- 特性不会影响应用元素的任何功能,只是约定了该元素具有的特质。
- 所有非抽象特性必须具有public访问限制。
- 特性常用于编译器指令,突破#define, #undefine, #if, #endif的限制,而且更加灵活。
- 特性常用于在运行期获得代码注释信息,以附加信息来优化调试。
- 特性可以应用在某些设计模式中,如工厂模式。
- 特性还常用于位标记,非托管函数标记、方法废弃标记等其他方面。
下面是很详细的Attribute应用教程: