C# 特性(Attribute)(一)

转载 2007年09月18日 14:00:00
 特性(Attributes)是一种崭新的声明性信息。我们不仅可以通过特性来定义设计层面的信息(例如help file, URL for documentation)以及运行时(run-time)信息(例如使XMLclass相联系),而且我们还可以利用特性建立自描述(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特性类添加了一个属性并且在后续的部分中我们会在运行时环境中查寻它。
    
定义或控制特性的使用  

 

C# 特性(Attribute)入门

By sadaf alvi 翻译:cppbug (itwizard@163.com)  绪论  特性(Attributes)是一种崭新的声明性信息。我们不仅可以通过特性来定义设计层面的信息...
  • natsu1211
  • natsu1211
  • 2014年06月25日 23:10
  • 762

C# Attribute 特性 的用处举例

**特性(Attribute)是用来 向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的。 特性(Attribute)用于添加元数据,如编译器指令和注释、描...
  • cctvcqupt
  • cctvcqupt
  • 2017年03月22日 15:22
  • 767

C#方法名前的方括号作用

我们经常会看到一些C#代码的方法名前有一个方括号,里面有一行文字,如: 1、序列化: [Serializable] public void 方法名(){...} 2、WebServic...
  • lins1393997412
  • lins1393997412
  • 2012年04月06日 14:31
  • 7338

C# System.Attribute (中括号)

本文以一个项目中通用的验证类来举例说明如何使用自定义Attribute来扩展元数据。  在项目中,我们为了保证各个层次之间的松藕合,通常把在各个层次之间传递数据的封装在一个称为实体类的类中,比如Ac...
  • yuwuji
  • yuwuji
  • 2011年11月11日 00:57
  • 8861

C# Socket简单例子(服务器与客户端通信)

这个例子只是简单实现了如何使用 Socket 类实现面向连接的通信。注意:此例子的目的只是为了说明用套接字写程序的大概思路,而不是实际项目中的使用程序。在这个例子中,实际上还有很多问题没有解决,如消息...
  • Andrew_wx
  • Andrew_wx
  • 2011年07月24日 15:55
  • 223436

C#入门经典 第6版[扫描版PDF电子书]

  • 2015年05月08日 17:00
  • 54.7MB
  • 下载

C#中的内存分配

稍微有过C#基础的程序员都知道,值类型和引用类型在内存中的分配方式是不一样的。下面我们就来谈谈他们的具体分配过程。 1. 对值类型的分配。 虚拟内存中存在一个叫堆栈的区域,我们并不知道它到...
  • qyxls
  • qyxls
  • 2015年04月01日 22:49
  • 1833

C语言:详解指针

指针应该算得上是c语言的精华,但也是难点。很多教程或者博客都有对其详细的讲解与分析。我这一节的内容,也是讲解指针,但我会尽量使用图解的方式,使大家很容易理解及掌握。 一、基本使用 先来看看下面的代码:...
  • sinat_27706697
  • sinat_27706697
  • 2015年08月22日 09:58
  • 21456

C#调用摄像头的几种方式

C#调用摄像头的方式本文将讲诉在C#的winform程序中如何调用摄像头: 1.调用USB摄像头 2.调用普通IP摄像头 3.通过摄像头SDK进行调用使用的DLL首先给上我所使用的DLL 调用...
  • xujie1991618
  • xujie1991618
  • 2015年06月23日 10:34
  • 12342

关于C# 2位数组

常用定义2位数数组如下:int a[,]=new int[2,2]{{0,1},{0,1}}string b[,]=new string[2,2]{{"a","b"},{"a","b"}}以上情况 是...
  • raokaichuan
  • raokaichuan
  • 2010年08月27日 13:54
  • 2947
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C# 特性(Attribute)(一)
举报原因:
原因补充:

(最多只允许输入30个字)