定制特性Attribute,允许把定义的信息应用到元数据表记录项,扩展类型的能力。通过对这些元数据信息的扩展,我们可以在运行时动态的改变原有代码的执行方式。
1.使用定制特性
定制特性Attribute可以应用到类型和成员上,像常用的一些特性public、static、DLLImport等,它们为我们的使用带来了很大的便利。
定制特性使用很简单,只要把我们想要使用的特性加到指定的目标元素上,如下这样:
[DllImport("Kernel32.dll",CharSet = CharSet.Auto)]
public extern static bool CloseHandle(IntPtr handle);
DLLImport定制特性就作用在了方法上,告诉CLR该方法的实现位于指定DLL的非托管代码中。其实定制特性只是把一些附近信息和我们的目标类型进行了关联。定制特性可以用于多种目标元素上,包括:
1)应用于程序集 [assembly : My1Attribute]
2)应用于模块 [module: My2Attribute]
3)应用于类型 [type : My3Attribute]
4)应用于字段 [field : My4Attribute]
5)应用于返回值 [return : My5Attribute]
6)应用于方法 [method : My6Attribute]
7)应用于参数 [params : My7Attribute]
8)应用于属性 [property : My8Attribute]
9)应用于访问器 [method : My9Attribute]
10)应用于事件 [event : My10Attribute]
在.Net Framework中定义了好几百个Attribute,在后续的版本中可能还会更多,这些定义好的特性为我们的编程提供了方便。定制特性可以多次的用在一个目标元素上,也可以在一个目标元素上应用多个定制特性。
2.定义自己的特性
我们也可以定义自己的特性,自定义的特性必须从Attribute类型继承,且类型的命名也应该是Attribute的后缀(不是必须的)。如下所示:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
public class [DefaultAttribute ]
public class SomeCustomPricingClass
{
}
: Attribute { public DefaultAttribute() {} }
从Attribute继承确保了自定义的类型和CLS的兼容性,在上面的自定义的特性上同时又应用了其他的定制特性,因为特性本身就是一个类类型,所有可以应用到类型上的定制特性都可以应用到自定义的特性类型上。在自定义特性时我们可以指定特性的目标元素,上面的自定义特性指定了该特性可以用在类类型和方法上,同时允许在一个目标元素上多次应用这个特性。
应用自定义特性:
3.检测定制特性
定制