C# 特性(Attribute)详细介绍
2014-05-17 12:00
253 查看
1、什么是Atrribute 首先,我们肯定Attribute是一个类,下面是msdn文档对它的描述:
公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft .NET Framework文件的元数据保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。
在.NET中,Attribute被用来处理多种问题,比如序列化、程序的安全特征、防止即时编译器对程序代码进行优化从而代码容易调试等等。下面,我们先来看几个在.NET中标准的属性的使用,稍后我们再回过头来讨论Attribute这个类本身。(文中的代码使用C#编写,但同样适用所有基于.NET的所有语言)
2、Attribute作为编译器的指令
在C#中存在着一定数量的编译器指令,如:#define DEBUG, #undefine DEBUG, #if等。这些指令专属于C#,而且在数量上是固定的。而Attribute用作编译器指令则不受数量限制。比如下面的三个Attribute:
Conditional:起条件编译的作用,只有满足条件,才允许编译器对它的代码进行编译。一般在程序调试的时候使用。
DllImport:用来标记非.NET的函数,表明该方法在一个外部的DLL中定义。
Obsolete:这个属性用来标记当前的方法已经被废弃,不再使用了。
下面的代码演示了上述三个属性的使用:
#define DEBUG //这里定义条件
2
3using System;
4using System.Runtime.InteropServices;
5using System.Diagnostics;
6
7namespace AttributeDemo
8public enum AttributeTargets
2using System;
2[AttributeUsage(AttributeTargets.Class), AllowMultiple = false,
3Inherited = false ]
4public class HelpAttribute : Attribute
5[Help("this is a do-nothing class")]
public class AnyClass
[Help("this is a do-nothing class")]
[Help("it contains a do-nothing method")]
public class AnyClass
[Help("BaseClass")]
public class Base
public class Derive : Base
[Help("BaseClass")]
public class Base
[Help("DeriveClass")]
public class Derive : Base
{
}
现在我们来查询一下Help特性,我们只能得到派生类的属性,因为inherited被设置为true,但是AllowMultiple却被设置为false。因此基类的Help特性被派生类Help特性覆盖了。
第四种情况:
在这里,我们将会发现派生类既有基类的Help特性,也有自己的Help特性,因为AllowMultiple被设置为true。
至此,我们介绍了有关Attribute类和它们的代码格式。你一定想知道到底如何在你的应用程序中使用Attribute,如果仅仅是前面介绍的内容,还是不足以说明Attribute有什么实用价值的话,那么从后面的章节开始我们将介绍几个Attribute的不同用法,相信你一定会对Attribute有一个新的了解。
公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft .NET Framework文件的元数据保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。
在.NET中,Attribute被用来处理多种问题,比如序列化、程序的安全特征、防止即时编译器对程序代码进行优化从而代码容易调试等等。下面,我们先来看几个在.NET中标准的属性的使用,稍后我们再回过头来讨论Attribute这个类本身。(文中的代码使用C#编写,但同样适用所有基于.NET的所有语言)
2、Attribute作为编译器的指令
在C#中存在着一定数量的编译器指令,如:#define DEBUG, #undefine DEBUG, #if等。这些指令专属于C#,而且在数量上是固定的。而Attribute用作编译器指令则不受数量限制。比如下面的三个Attribute:
Conditional:起条件编译的作用,只有满足条件,才允许编译器对它的代码进行编译。一般在程序调试的时候使用。
DllImport:用来标记非.NET的函数,表明该方法在一个外部的DLL中定义。
Obsolete:这个属性用来标记当前的方法已经被废弃,不再使用了。
下面的代码演示了上述三个属性的使用:
#define DEBUG //这里定义条件
2
3using System;
4using System.Runtime.InteropServices;
5using System.Diagnostics;
6
7namespace AttributeDemo
8public enum AttributeTargets
2using System;
2[AttributeUsage(AttributeTargets.Class), AllowMultiple = false,
3Inherited = false ]
4public class HelpAttribute : Attribute
5[Help("this is a do-nothing class")]
public class AnyClass
[Help("this is a do-nothing class")]
[Help("it contains a do-nothing method")]
public class AnyClass
[Help("BaseClass")]
public class Base
public class Derive : Base
[Help("BaseClass")]
public class Base
[Help("DeriveClass")]
public class Derive : Base
{
}
现在我们来查询一下Help特性,我们只能得到派生类的属性,因为inherited被设置为true,但是AllowMultiple却被设置为false。因此基类的Help特性被派生类Help特性覆盖了。
第四种情况:
在这里,我们将会发现派生类既有基类的Help特性,也有自己的Help特性,因为AllowMultiple被设置为true。
至此,我们介绍了有关Attribute类和它们的代码格式。你一定想知道到底如何在你的应用程序中使用Attribute,如果仅仅是前面介绍的内容,还是不足以说明Attribute有什么实用价值的话,那么从后面的章节开始我们将介绍几个Attribute的不同用法,相信你一定会对Attribute有一个新的了解。
相关文章推荐
- C# 特性(Attribute)详细介绍
- (转)C# 特性(Attribute)详细介绍
- C# 特性(Attribute)详细介绍
- C# 特性(Attribute)详细介绍(转载)
- C# 特性(Attribute)详细介绍
- C# 特性(Attribute)详细介绍
- C# 特性(Attribute)详细介绍
- C# 特性(Attribute)详细介绍
- [c#基础教程]C# 特性(Attribute)详细介绍
- 深入C# 4.0 新特性dynamic、可选参数、命名参数的详细介绍
- 深入C# 4.0 新特性dynamic、可选参数、命名参数的详细介绍
- C# 程序设计中特性详细介绍-翻译
- C# 特性(Attribute)(二)
- C# 特性(Attribute)学习。
- C# 特性(Attribute)入门(二)
- 收集:C#中的特性Attribute
- C#的特性(Attribute)的应用
- c# 的颜色空间模型详细介绍 Manipulating colors in .NET
- C# 特性(Attribute)学习
- C# 特性(Attribute)入门(一)