您现在的位置是:首页 > .NET

.NET

.Net中Attribute详解

2020-11-21 11:29:56 .NET admin
Attribute的基本概念在具体的演示之前,我想先大致介绍一下Attribute。我们知道在类的成员中有property成员,二者在中文中都做属性解释,那么它们到底是不是同一个东西呢?从代码上看,明显不同,首先就是它们的在代码中的位置不同
Attribute的基本概念
在具体的演示之前,我想先大致介绍一下Attribute。我们知道在类的成员中有property成员,二者在中文中都做属性解释,那么它们到底是不是同一个东西呢?从代码上看,明显不同,首先就是它们的在代码中的位置不同,其次就是写法不同(Attribute必须写在一对方括弧中)。

什么是Atrribute
首先,我们看一下MSDN对它的解释:
公共语言运行时允许你添加类似关键字的描述声明,叫做attributes,它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft.NETFramework文件的元数据保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。

在.NET中,Attribute被用来处理多种问题,比如序列化、程序的安全特征、防止即时编译器对程序代码进行优化从而代码容易调试等等。下面,我们先来看几个在.NET中标准的属性的使用,稍后我们再回过头来讨论Attribute这个类本身。

Attribute作为编译器的指令
在C#中存在着一定数量的编译器指令,如:#defineDEBUG,#undefineDEBUG,#if等。这些指令专属于C#,而且在数量上是固定的。而Attribute用作编译器指令则不受数量限制。比如下面的三个Attribute:
·Conditional:起条件编译的作用,只有满足条件,才允许编译器对它的代码进行编译。一般在程序调试的时候使用。
·DllImport:用来标记非.NET的函数,表明该方法在一个外部的DLL中定义。
·Obsolete:这个属性用来标记当前的方法已经被废弃,不再使用了。

下面的代码演示了上述三个属性的使用:
#defineDEBUG//这里定义条件
usingSystem;
usingSystem.Runtime.InteropServices;
usingSystem.Diagnostics;

namespaceAttributeDemo
{
classMainProgramClass
{
[DllImport("User32.dll")]
publicstaticexternintMessageBox(inthParent,stringMessage,stringCaption,intType);

staticvoidMain(string[]args)
{
DisplayRunningMessage();
DisplayDebugMessage();

MessageBox(0,"Hello","Message",0);

Console.ReadLine();
}

[Conditional("Release")]
privatestaticvoidDisplayRunningMessage()
{
Console.WriteLine("开始运行Main子程序。当前时间是"+DateTime.Now);
}

[Conditional("DEBUG")]
[Obsolete]
privatestaticvoidDisplayDebugMessage()
{
Console.WriteLine("开始Main子程序");
}
}
}