特性Attribute

1.简介

  特性(attribute)是被指定给某一声明的一则附加的声明性信息。

       在C#中,有一个小的预定义特性集合。在学习如何建立我们自己的定制特性(custom attributes)之前,我们先来看看在我们的代码中如何使用预定义特性。

using System; 
public class AnyClass 
{ 
    [Obsolete("Don't use Old method, use New method", true)] //这是一个特性,影响了Old函数
    static void Old( ) { }  
    static void New( ) { } 
    public static void Main( ) 
    { 
        Old( ); 
    } 
}

    我们先来看一下上面这个例子,在这个例子中我们使用了Obsolete特性,它标记了一个不应该再被使用的程序实体。第一个参数是一个字符串,它解释了为什么该实体是过时的以及应该用什么实体来代替它。实际上,你可以在这里写任何文本。第二个参数的作用是当编译器使用这个过时的程序实体时报错,如果它的默认值是false,编译器就不会报错,而是产生一个警告。

2.自己定制特性

  我们要从System.Attribute派生出我们自己的特性类(一个从System.Attribute抽象类继承而来的类,不管是直接还是间接继承,都会成为一个特性类。特性类的声明定义了一种可以被放置在声明之上新的特性)。

using System; 
public class HelpAttribute : Attribute 
{ 
} 

  不管你是否相信,我们已经建立了一个定制特性,现在我们可以用它来装饰现有的类就好像上面我们使用Obsolete attribute一样,不过这个特性还没有起到什么作用。

  对一个特性类名使用Attribute后缀是一个惯例。然而,当我们把特性添加到一个程序实体,是否包括 Attribute后缀是我们的自由。编译器会首先在System.Attribute的派生类中查找被添加的特性类。如果没有找到,那么编译器会添加 Attribute后缀继续查找。

3.向自己定制的特性里面放入内容

详见刘昕鑫:https://www.cnblogs.com/liuxinxin/articles/2265672.html

4.预定义特性

.Net 框架提供了三种预定义特性:

  • AttributeUsage
  • Conditional
  • Obsolete

AttributeUsage 

  描述了如何使用一个自定义特性类。它规定了特性可应用到的项目的类型。

  

Conditional

  这个预定义特性标记了一个条件方法,其执行依赖于指定的预处理标识符。

  它会引起方法调用的条件编译,取决于指定的值,比如 Debug 或 Trace。例如,当调试代码时显示变量的值。

Obsolete

  这个预定义特性标记了不应被使用的程序实体。它可以让您通知编译器丢弃某个特定的目标元素。例如,当一个新方法被用在一个类中,但是您仍然想要保持类中的旧方法,您可以通过显示一个应该使用新方法,而不是旧方法的消息,来把它标记为 obsolete(过时的)。

详见菜鸟教程:http://www.runoob.com/csharp/csharp-attribute.html

原文地址:https://www.cnblogs.com/wskxy/p/9219822.html