C#内置特性介绍

开发 后端
本文介绍了C#内置特性。特性是为程序添加元数据(描述数据的数据)的一种机制,通过它可以给编译器提供指示或者提供对数据的说明。

 .Net 中可以使用特性来完成这一工作。特性是一个对象,它可以加载到程序集及程序集的对象中,这些对象包括 程序集本身、模块、类、接口、结构、构造函数、方法、方法参数等,加载了特性的对象称作特性的目标。特性是为程序添加元数据(描述数据的数据)的一种机制,通过它可以给编译器提供指示或者提供对数据的说明。

NOTE:特性的英文名称叫做Attribute,在有的书中,将它翻译为“属性”;另一些书中,将它翻译为“特性”;由于通常我们将含有get和/或set访问器的类成员称为“属性”(英文Property),所以本文中我将使用“特性”这个名词,以区分“属性”(Property)。  

中文版的VS2005使用“属性”。

C#内置特性之System.ObsoleteAttribute 特性

我们通过这个例子来看一下特性是如何解决上面的问题:我们可以给旧的SendMsg()方法上面加上Obsolete特性来告诉编译器这个方法已经过时,然后当编译器发现当程序中有地方在使用这个用Obsolete标记过的方法时,就会给出一个警告信息。

  1. namespace Attribute {  
  2.  
  3.     public class Message {}  
  4.       
  5.     public class TestClass {  
  6.        // 添加Obsolete特性  
  7.        [Obsolete("请使用新的SendMsg(Message msg)重载方法")]  
  8.        public static void ShowMsg() {  
  9.            Console.WriteLine("这是旧的SendMsg()方法");  
  10.        }  
  11.  
  12.        public static void ShowMsg(Message msg) {  
  13.            Console.WriteLine("新SendMsg()方法");  
  14.        }  
  15.  
  16.     }  
  17.  
  18.     class Program {  
  19.        static void Main(string[] args) {  
  20.            TestClass.ShowMsg();  
  21.            TestClass.ShowMsg(new Message());            
  22.        }  
  23.     }  
  24. }  
  25.  

现在运行这段代码,我们会发现编译器给出了一个警告:警告CS0618: “Attribute.TestClass.ShowMsg()”已过时:“请使用新的SendMsg(Message msg)重载方法”。通过使用特性,我们可以看到编译器给出了警告信息,告诉客户程序存在一个新的方法可供使用,这样,程序员在看到这个警告信息后,便会考虑使用新的SendMsg()方法。

NOTE:简单起见,TestClass类和 Program位于同一个程序集中,实际上它们可以离得很远。

C#内置特性的使用方法

通过上面的例子,我们已经大致看到特性的使用方法:首先是有一对方括号“[]”,在左方括号“[”后紧跟特性的名称,比如Obsolete,随后是一个圆括号“()”。和普通的类不同,这个圆括号不光可以写入构造函数的参数,还可以给类的属性赋值,在Obsolete的例子中,仅传递了构造函数参数。

NOTE:实际上,当你用鼠标框选住Obsolete,然后按下F12转到定义,会发现它的全名是ObsoleteAttribute,继承自Attribute类。但是这里却仅用Obsolete来标记方法,这是.Net的一个约定,所有的特性应该均以Attribute来结尾,在为对象标记特性时如果没有添加Attribute,编译器会自动寻找带有Attribute的版本。

NOTE:使用构造函数参数,参数的顺序必须同构造函数声明时的顺序相同,所有在特性中也叫位置参数(Positional Parameters),与此相应,属性参数也叫做命名参数(Named Parameters)。

以上就是C#内置特性的简单介绍。

【编辑推荐】

  1. C#基础知识一览
  2. 学习C#自定义用户控件
  3. C#自定义组件和用户组件属性的设置
  4. C#编程中的组件-事件-委托
  5. Visual C#自定义组件的设计:Pop3Com组件
责任编辑:book05 来源: cnblogs
相关推荐

2009-08-04 08:58:01

C#自定义特性

2009-08-19 16:51:14

C# 4.0 dyna

2016-10-13 13:33:41

反射特性c#

2009-08-19 16:50:32

Visual C#C#语言特性

2009-08-12 18:35:36

C# ArrayLis

2009-08-24 18:01:45

C#3.0新特性

2009-08-26 17:10:09

C# 3.5新特性

2009-08-26 16:01:37

C#特性

2010-01-25 18:19:17

C++特性

2009-08-10 16:30:56

C# BitmapDa

2009-09-02 17:20:50

C# Parsing

2009-08-25 10:24:29

C# delegate

2009-08-17 16:47:51

C# Anonymou

2010-01-25 18:19:17

C++特性

2010-01-25 18:19:17

C++特性

2009-07-31 14:15:38

C# 构造函数

2009-08-12 15:43:02

操作C# Datase

2009-09-03 15:57:11

C# SystemMe

2009-08-12 09:41:28

C# Director

2009-08-18 16:45:40

C# Raw Sock
点赞
收藏

51CTO技术栈公众号