原文:http://msdn.microsoft.com/zh-cn/library/5x6cd29c.aspx
如果您使用过 C++,或许对包含关键字(如 public 和 private)的声明比较熟悉,这些关键字提供有关类成员的其他信息。 另外,这些关键字通过描述类成员对其他类的可访问性来进一步定义类成员的行为。 由于编译器被显式设计为识别预定义关键字,因此传统上您没有机会创建自己的关键字。 但是,公共语言运行时允许您添加类似关键字的描述性声明(称为特性)来批注编程元素,如类型、字段、方法和属性。
为运行时编译代码时,该代码被转换为 Microsoft 中间语言 (MSIL),并同编译器生成的元数据一起被放到可迁移可执行 (PE) 文件的内部。 特性使您得以向元数据中放置额外的描述性信息,并可使用运行时反射服务提取该信息。 当您声明从 System.Attribute 派生的特殊类的实例时,编译器会创建特性。
.NET Framework 出于多种原因使用特性并通过它们解决若干问题。 特性描述如何将数据序列化,指定用于强制安全性的特性,并限制实时 (JIT) 编译器的优化,从而使代码易于调试。 特性还可以记录文件名或代码作者,或在窗体开发阶段控制控件和成员的可见性。
可使用特性以几乎所有可能的方式描述代码,并以富有创造性的新方式影响运行时行为。 使用特性可以向 C#、Visual C++、Microsoft Visual Basic 2005 或其他任何以运行时为目标的语言添加自己的描述性元素,而不必重新编写编译器。