zoukankan      html  css  js  c++  java
  • 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 

             

          

  • 相关阅读:
    在SQLite中使用索引优化查询速度
    SQLite支持的SQL数据操作
    left (outer) join , right (outer) join, full (outer) join, (inner) join, cross join 区别
    深入理解Android内存管理原理(六)
    Merge Sorted Array
    Sort Colors
    Construct Binary Tree from Preorder and Inorder Traversal
    Binary Tree Postorder Traversal
    Symmetric Tree
    Rotate Image
  • 原文地址:https://www.cnblogs.com/luyuwei/p/3655102.html
Copyright © 2011-2022 走看看