NET 技术FAQ(六)属性

6. 属性
6.1 什么是属性?
最少有两种类型的 .NET 属性。第一类我称其为 metadata 属性—它允许将某些数据附加到类或方法上。这些数据称为类的 metadata 的一部分,并且可以像类的其它 metadata 一样通过映射来访问。metadata 的另一种属性是 [serializable],将它附加到类上表示类的实例可以被串行化。
[serializable] public class CTest {}
另一种类型的属性是上下文属性。上下文类型的属性使用和 metadata 相似的语法,但实际上它们是不同的。上下文类型属性提供一种解释机制,通过这种机制,实例的活动和方法调用可以是预先处理和/或随后处理的。如果你了解 Keith Brown 的通用委托器你可能熟悉这种思想。
 
6.2 我能创建自己的 metadata 属性吗?
是的。简单地从 System.Attribute 导出一个类并将其标记为 AttributeUsage 属性。例如:
[AttributeUsage(AttributeTargets.Class)]
public class InspiredByAttribute : System.Attribute
{
 public string InspiredBy;

 public InspiredByAttribute( string inspiredBy )
 {
  InspiredBy = inspiredBy;
 }
}


[InspiredBy("Andy Mc's brilliant .NET FAQ")]
class CTest
{
}
class CApp
{
 public static void Main()
 {
             object[] atts = typeof(CTest).GetCustomAttributes();
             foreach( object att in atts )
             if( att is InspiredByAttribute )
              Console.WriteLine( "Class CTest was inspired by {0}", _
     ((InspiredByAttribute)att).InspiredBy  );
 }
}
原文地址:https://www.cnblogs.com/shf/p/806719.html