一、Attribute 概述
公共语言运行库允许您添加类似关键字的描述性声明(称为属性 (Attribute))来批注编程元素,如类型、字段、方法和属性 (Property)。关键字:如果您使用过 C++,或许对包含关键字(如 public 和 private)的声明比较熟悉,这些关键字提供有关类成员的其他信息。另外,这些关键字通过描述类成员对其他类的可访问性来进一步定义类成员的行为。由于编译器被显式设计为识别预定义关键字,因此传统上您没有机会创建自己的关键字。
二、应用属性
通过下列过程将属性应用到代码元素。
通过从 .NET Framework 导入属性的命名空间来定义新的属性或使用现有属性。
通过在紧邻代码元素之前放置属性来将该属性应用于代码元素。
为属性指定位置参数和命名参数。
属性在您编译代码时被发送到元数据中,并可通过运行库反射服务用于公共语言运行库以及任何自定义工具或应用程序。
按照约定,所有属性名都以 Attribute 结尾。但是,某些以运行库为目标的语言(如 Visual Basic 和 C#)不要求指定属性的全名。例如,如果要初始化 System.ObsoleteAttribute,只需将其引用为 Obsolete 即可。
将属性应用于方法
下面的代码示例显示如何声明 System.ObsoleteAttribute,该属性将代码标记为过时。字符串 "Will be removed in next version" 被传递到该属性。当调用该属性所描述的代码时,该属性将产生编译器警告以显示所传递的字符串。
- using System;
- public class Example
- {
- // Specify attributes between square brackets in C#.
- // This attribute is applied only to the Add method.
- [Obsolete("Will be removed in next version.")]
- public static int Add(int a, int b)
- {
- return (a + b);
- }
- }
- class Test
- {
- static void Main()
- {
- // This generates a compile-time warning.
- int i = Example.Add(2, 2);
- }
- }
在程序集级别应用属性
如果要在程序集级别应用属性,请使用 Assembly 关键字。下列代码显示在程序集级别应用的 AssemblyNameAttribute。
- using System.Reflection;
- [assembly:AssemblyName("MyAssembly")]
三、编写自定义属性
自定义属性实质上是直接或间接地从 System.Attribute 派生的传统类。与传统类一样,自定义属性也包含存储和检索数据的方法。正确设计自定义属性类的主要步骤如下:
1、应用 AttributeUsageAttribute
自定义属性声明以 AttributeUsageAttribute 开始,包含三个对创建自定义属性具有重要意义的成员:AttributeTargets、Inherited 和 AllowMultiple。
AttributeTargets 成员:指示该属性可以应用的程序元素。以下之一:程序集、字段、事件、方法、模块、参数、属性、返回值、类型。
继承属性:Inherited 属性:指示属性是否可由从该属性应用到的类派生的类继承。该属性采用 true(默认值)或 false 标志。
AllowMultiple 属性: 指示元素中是否可存在属性的多个实例。
2、声明属性类
应用 AttributeUsa