C#笔记11:特性(Attribute)
时间:2010-09-11 来源:luminji
C#笔记11:特性(Attribute)
本章概要:
1:什么是特性
2:特性的用途
3:自定义特性
4:使用Attribute的拦截机制
1:什么是特性
特性提供功能强大的方法,用以将声明信息与代码(类型、方法、属性等)相关联。特性与程序实体关联后,即可在运行时使用名为“反射”的技术查询特性。
2:特性的用途
以下列表包含特性的几个常见用途:
-
在 Web 服务中,使用 WebMethod 特性来标记方法,以指示该方法应该可通过 SOAP 协议进行调用。有关更多信息,请参见 WebMethodAttribute。
-
描述当与本机代码进行交互操作时如何封送方法参数。有关更多信息,请参见 MarshalAsAttribute。
-
描述类、方法和接口的 COM 属性。
-
使用 DllImportAttribute 类调用非托管代码。
-
在标题、版本、说明或商标方面描述您的程序集。
-
描述要持久性序列化类的哪些成员。
-
描述如何映射类成员和 XML 节点以便进行 XML 序列化。
-
描述方法的安全要求。
-
指定用于强制安全性的特性。
-
由实时 (JIT) 编译器控制优化,以便易于调试代码。
3:自定义特性
通过定义一个特性类,可以创建您自己的自定义特性。该特性类直接或间接地从 Attribute 派生,有助于方便快捷地在元数据中标识特性定义。假设您要用编写类型的程序员的名字标记类型。可以定义一个自定义 Author 特性类:
类名是特性的名称,即 Author。它由 System.Attribute 派生而来,因此是自定义特性类。构造函数的参数是自定义特性的定位参数。本示例中 name 是定位参数。任何公共的读写字段或属性都是命名参数。在本例中,version 是唯一的命名参数。请注意 AttributeUsage 特性的用法,它使得 Author 特性仅在类和 struct(在 Visual Basic 中是 Structure)声明中有效。
可以按如下所示使用此新特性:
4:使用Attribute的拦截机制
这是一个高级特性,在本处不打算详述。