C# 特性(Attribute)(一)

特性(Attributes)是一种崭新的声明性信息。我们不仅可以通过特性来定义设计层面的信息(例如help file, URL for documentation)以及运行时(run-time)信息(例如使XML与class相联系),而且我们还可以利用特性建立自描述(self- describing)组件。在这篇教程中,我们将会看到如何建立和添加特性到各种程序实体以及如何在运行时环境中获取特性信息。
   定义
   正如MSDN中所描述的那样-----  
   “特性是被指定给某一声明的一则附加的声明性信息。”  
  使用预定义(Pre-defined)特性  
  在C#中,有一个小的预定义特性集合。在学习如何建立我们自己的定制特性(custom attributes)之前,我们先来看看在我们的代码中如何使用预定义特性。  
  using System;
  public class AnyClass
  {
   [Obsolete("Don‘t use Old method, use New method", true)]
   static void Old( ) { }  
   static void New( ) { }  
   public static void Main( )
   {
   Old( );
   }
  }
  我们先来看一下上面这个例子,在这个例子中我们使用了Obsolete特性,它标记了一个不应该再被使用的程序实体。第一个参数是一个字符串,它解释了为什么该实体是过时的以及应该用什么实体来代替它。实际上,你可以在这里写任何文本。第二个参数告诉编译器应该把使用这个过时的程序实体当作 一种错误。它的默认值是false,也就是说编译器对此会产生一个警告。  
  当我们尝试编译上面这段程序的时候,我们将会得到一个错误:  
  AnyClass.Old()‘ is obsolete: ‘Don‘t use Old method, use New method‘    
  开发定制特性(custom attributes) 
  现在让我们来看看如何开发我们自己的特性。 
  首先我们要从System.Attribute派生出我们自己的特性类(一个从System.Attribute抽象类继承而来的类,不管是直接还是间接继承,都会成为一个特性类。特性类的声明定义了一种可以被放置在声明之上新的特性)。  
  using System;
  public class HelpAttribute : Attribute
  {
  }
  不管你是否相信,我们已经建立了一个定制特性,现在我们可以用它来装饰现有的类就好像上面我们使用Obsolete attribute一样。  
  [Help()]
  public class AnyClass
  {
  }
  注意:对一个特性类名使用Attribute后缀是一个惯例。然而,当我们把特性添加到一个程序实体,是否包括Attribute后缀是我们 的自由。编译器会首先在System.Attribute的派生类中查找被添加的特性类。如果没有找到,那么编译器会添加Attribute后缀继续查 找。  
  到目前为止,这个特性还没有起到什么作用。下面我们来添加些东西给它使它更有用些。  
  using System;
  public class HelpAttribute : Attribute
  {
   public HelpAttribute(String Descrition_in)
   {
   this.description = Description_in;
   }
   protected String description;
   public String Description
   {
   get
   {
   return this.description;  
   }
   }
  }
  [Help("this is a do-nothing class")]
  public class AnyClass
  {
  }
  在上面的例子中,我们给HelpAttribute特性类添加了一个属性并且在后续的部分中我们会在运行时环境中查寻它。
     定义或控制特性的使用

时间: 2024-11-13 20:16:04

C# 特性(Attribute)(一)的相关文章

.NET基础编程之特性 - Attribute

这一篇文章是给大家介绍的是:.NET基础编程之特性 - Attribute,对这一部分掌握不熟悉的同学,可以仔细的看一下! 一.特性简介 特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集.类型.方法.属性等)相关联.特性与程序实体关联后,可在运行时使用"反射"查询特性. 特性具有以下属性: (1)特性可向程序中添加元数据.元数据是有关在程序中定义的类型的信息.所有的 .NET 程序集都包含指定的一组元数据,这些元数据描述在程序集中定义的类型和类型成员.可以添加自定义特性,以

C# 知识特性 Attribute

C#知识--获取特性 Attribute 特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集.类型.方法.属性等)相关联.特性与程序实体关联后,可在运行时使用"反射"查询特性,获取特性集合方法是GetCustomAttributes(); 根据约定,所有特性名称都以单词"Attribute"结束,以便将它们与".NET Framework"中的其他项区分.但是,在代码中使用特性时,不需要指定 attribute 后缀.在声明特性类时要以

[C#] 剖析 AssemblyInfo.cs - 从这里了解常用的特性 Attribute

剖析 AssemblyInfo.cs - 从这里了解常用的特性 Attribute [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5944391.html 序 上次,我们通过<C# 知识回顾 - 特性 Attribute>已经了解如何创建和使用特性 Attribute,这次,让我们一起来看看每次使用 VS 创建项目时所自带的文件 AssemblyInfo.cs. 目录 核心代码 展开图中的代码,看箭头↓ using System.Reflecti

.NET特性-Attribute

两篇文章有助于学习Attribute特性的概念. http://blog.csdn.net/byondocean/article/details/6802111 http://www.cnblogs.com/JimmyZhang/archive/2008/01/27/1055254.html .NET特性-Attribute

.Net内置特性Attribute介绍

特性Attribute概述 特性(Attribute)是一种特殊的类型,可以加载到程序集或者程序集的类型上,这些类型包括模块.类.接口.结构.构造函数.方法.字段等,加载了特性的类型称之为特性的目标.这里为与属性(Property)区分,所以称之为特性(Attribute).特性是为程序集添加元数据的一种机制,通过它可以为编译器提供指示或者对数据进行说明.例如前段时间学习的Remoting技术(主要用于应用程序域之间的对象通信)中在应用程序域间的引用对象时该对象具有序列化(Serializabl

区分元素特性attribute和对象属性property

其实attribute和property两个单词,翻译出来都是属性,但是<javascript高级程序设计>将它们翻译为特性和属性,以示区分.本文将详细介绍特性和属性的不同之处 定义 元素特性attribute是指HTML元素标签的特性 下面的id.class.title.a都是特性,其中a叫做自定义特性 <div id="id1" class="class1" title="title1" a='a1'></div

.net之特性(Attribute)

看了一些关于这方面的文档,自我总结: 特性(Attribute)就是对一个方法或类做的一个额外的属性说明,也就是附加说明 下面是我自己抄的一个实例程序: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; namespace SomeTest { class Program { static void Main(string[]

C# 自定义特性Attribute

一.特性Attribute和注释有什么区别 特性Attribute A:就是一个类,直接继承/间接继承Attribute B:特性可以在后期反射中处理,特性本身是没有什么*用的 C:特性会影响编译和运行时功能 注释 A:就是对代码的解释和说明,其目的是让人们能够更加轻松地了解代码.注释是编写程序时,写程序的人给一个语句.程序段.函数等的解释或提示,能提高程序代码的可读性 B:注释不能后期处理 二.自定义Attribute特性的使用 自定义Attribute特性的语法 其实特性就是一个类,直接继承

C# 特性(Attribute)(二)

AttributeUsage类是另外一个预定义特性类,它帮助我们控制我们自己的定制特性的使用.它描述了一个定制特性如和被使用.    AttributeUsage有三个属性,我们可以把它放置在定制属性前面.第一个属性是:    ValidOn    通过这个属性,我们能够定义定制特性应该在何种程序实体前放置.一个属性可以被放置的所有程序实体在AttributeTargets enumerator中列出.通过OR操作我们可以把若干个AttributeTargets值组合起来.    AllowMu