zoukankan      html  css  js  c++  java
  • C#attribute-----------初级

    前言:

    attribute是 .net FrameWork 提出的技术,可以为自己的代码添加注解,从而实现些特殊功能。

    一. attribute功能

    attribute被译作特性,既然是特性,必然功能不一般。

    1.微软的说法

    MSDN给出的attribute功能:Attribute类将预定义的系统信息或用户定义的自定义信息与目标元素相关联。

    预定义的系统的信息也就是.net给出的系统attribute,用户自定义的信息也就是用户定义的attribute。目标元素呢就是指元数据的元素TypeDef(类,结构,枚举,接口,委托),MethodDef,ParamDef,FieldDef,PropertyDef.等等。


    2. 自己的看法

    无论是定制的Attribute(系统),还是自定义的Attribute 其目的都是为了增强 对你目标元素的修饰。就好比public,private这种修饰符是为了控制对元数据的访问权限。注释是为了方便其他人阅读理解代码。那么应用Attribute的场合就是当我需要对元数据进行修饰。那么问题来了,Attribute究竟能提供什么样的特性,让我们必须要使用它来修饰元数据呢

    1)设置我们的Assembly信息

    我们创建一个工程时,系统会自动生成一个Assemblyinfo.cs,这个文件就应用了大量了Attribute,为我们提供程序集信息

    [assembly: AssemblyTitle("AttributeTest")] //名称
    [assembly: AssemblyDescription("")] 
    [assembly: AssemblyConfiguration("")]
    [assembly: AssemblyCompany("Microsoft")]//程序集公司

    2)测试时经常用到的,ConitionAttribute,一个工程中需要测试的方法有很多,你把他归为几类,然后分别进行测试。总不能测试这类的代码就注释掉其他的代码嘛。这样做也太low了。这时候就可以利用ConitionAttribute特性

    给各类代码标示上不同的特性。然后在开头使用#define  AttributeName.想测试哪类就使用哪类Attribute名字。

    eg。

    工程中有两类方法

    [Conition("A")]

    public void method1()

    public void method2()

    [Conition("B")]

    public void method3()

    public void method4()

    然后在开头加上#define A

    这样运行时就会只识别method1(),method2()

    3)上面两种都是系统提供的定制Attribute,那么什么时候使用自定义的呢

    有需求的时候其他东西又实现不了的时候就可以考虑自定义Attribute了

    比如说,我现在做数据库表的实体类,这样取数据的时候绑定到实体类,不用一个个赋值。数据库中的列对应着实体类的属性。在select 表时,将结果绑定到实体类,你需要遍历实体类属性,所以你必须确保实体类中的都是属性而不是字段或其他什么。那么你如何做到这一点呢,怎么修饰这个元数据使之一定是属性呢:自定义attribute

    [AttributeUsage(AttributeTargets.Property)]//指定目标元素只能是属性
    class RetriveFromDb : Attribute
    {

    }


    [RetriveFromDb]

    public string ID { get; set; }//是property,编译通过


    [RetriveFromDb]

    public string GRADE = "98";//field,编译不通过

    本篇只解释了Attribute功能。后续讲解Attribute特点和如何使用

  • 相关阅读:
    【脑图】iOS的Crash分类和捕获
    Ruby03
    Ruby02
    Ruby01
    如何快速把一个十进制数转换为二进制?
    iOS
    互联网协议基本知识
    XCBB
    iOS
    iOS
  • 原文地址:https://www.cnblogs.com/stoneFang/p/6715317.html
Copyright © 2011-2022 走看看