C#特性

  一、概念:C#的特性也是一个类,继承自System.Attribute,用于描述类、方法、字段等

   

     二、类型:

     2.1  .net中特性用来处理多种问题,比如序列化、程序的安全特性、防止即时编译器对程序代码进行优化从而代码容易调试等等。

      定制特性的本质上是一个类的元素上去添加附加信息,并在运行其通过反射得到该附加信息(在使用数据实体对象时经常用到)

        2.2  Attribute 作为编译器的指令时的应用

           Conditional:起条件编译的作用,只有满足条件,才允许编译器对它的代码进行编译。一般在程序调试的时候使用

           DllImport: 用来标记费.net的函数,表明该方法在一个外部的DLL中定义。

           Obsolete: 这个属性用来标记当前的方法已经废弃,不再使用

           注:Attribute是一个类,因此DllImport也是一个类,Attribute类是在编译的时候实例化,而不是像通常那样在运行时实例化。

           CLSCompliant: 保证整个程序集代码遵守CLS,否则编译将报错。

        2.3   自定义特性

     AttributeTargets.All :可以应用到任何元素。比如:类、字段、方法、属性等。AttributeTargets.Class 表示只能用在类上,不能用在方法或字段等,否则编译器会报错!

              AllowMultiple=true: 表示可以多少使用,能否被重复放在同一个程序实体前多次。比如:可以应用在多个类或者方法,要看AttributeTargets的属性,若是AttributeTargets.Class,表示可以应用在多个

       类。

       Inherited=false:false表示不能继承到派生类,也就是说不能用在派生类。

    

 1 //限定特性类的应用范围  
 2 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Field, AllowMultiple = true, Inherited = false)]  
 3 //定制MsgAttribute特性类,继承于Attribute  
 4 public class ClassMsgAttribute : Attribute  
 5 {  
 6     //定义_msg字段和Msg属性//Msg属性用于读写msg字段  
 7     string _msg;  
 8     public string Msg { get { return _msg; } set { _msg = value; } }  
 9     public ClassMsgAttribute() { }  
10     //重载构造函数接收一个参数,赋值给_msg字段  
11     public ClassMsgAttribute(string s) { _msg = s; }   
12 }  
 1 //在Person类上标记ClassMsg特性  
 2 [ClassMsg(Msg = "这是关于人的姓名信息的类")]  
 3 class Person  
 4 {  
 5     //在_name字段上应用ClassMsg特性  
 6     [ClassMsg("这是存储姓名的字段")]  
 7     string _name;  
 8     //以下特性无法应用,因为MsgAttribute定义的特性只能用于类和字段  
 9     //[ClassMsg("这是读写姓名字段的属性")]  
10     public string Name { get { return _name; } set { _name = value; } }  
11 }  

转载自:http://blog.csdn.net/helloguonan/article/details/5912032

参考:http://www.kuqin.com/dotnet/20080628/10196.html 

         

      

原文地址:https://www.cnblogs.com/luyuwei/p/3655102.html