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 

             

          

  • 相关阅读:
    动态规划——E (LIS())最长上升子序列
    动态规划——F 最大矩阵和
    动态规划——I 记忆化搜索
    动态规划——C编辑最短距离
    动态规划——K背包问题
    动态规划——H 最少回文串
    动态规划——G 回文串
    动态规划——J 括号配对问题
    Codeforces4D
    UVa10635
  • 原文地址:https://www.cnblogs.com/luyuwei/p/3655102.html
Copyright © 2011-2022 走看看