.Net Attribute 什么是特性、预定义特性使用(一)
什么是特性?
特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的。
特性(Attribute)用于添加元数据,如编译器指令和注释、描述、方法、类等其他信息。在.Net 框架提供了两种类型的特性:预定义特性和自定义特性。
预定义特性
在.net框架内提供了三种预定义特性,经常使用特性或对特性有了解的朋友肯定见到过或用过。
- AttributeUsage
- Conditional
- obsolete
AttributeUsage
预定义特性?AttributeUsage?描述了如何使用一个自定义特性类。它规定了特性可应用到的项目的类型。使用AttributeUsage?特性有个前提,该类必须继承Attribute抽象类。
例如:
[AttributeUsage(AttributeTargets.Property)]//只能标记在属性上
public class MyCustomAttribute: Attribute
{
}
?AttributeUsage?使用语法详细如下:
?[AttributeUsage(AttributeTargets.Property,AllowMultiple =?true,Inherited =?true)]?
[AttributeUsage(
validon,
AllowMultiple=allowmultiple,
Inherited=inherited
)]
其中:
- 参数 validon 规定特性可被放置的语言元素。它是枚举器?AttributeTargets?的值的组合。默认值是?AttributeTargets.All。
- 参数?allowmultiple(可选的)为该特性的?AllowMultiple?属性(property)提供一个布尔值。如果为 true,则该特性是多用的。默认值是 false(单用的)。
- 参数?inherited(可选的)为该特性的?Inherited?属性(property)提供一个布尔值。如果为 true,则该特性可被派生类继承。默认值是 false(不被继承)。
例如:
[AttributeUsage(AttributeTargets.Class |//特性只能运用于类上 AttributeTargets.Constructor |//特性只能运用于构造函数上 AttributeTargets.Field |//特性只能运用于字段上 AttributeTargets.Method |//特性只能运用于方法上 AttributeTargets.Property, //特性只能运用于属性上 AllowMultiple = true)]//true:可以为程序元素指定有多个实
Conditional
这个预定义特性标记了一个条件方法,其执行依赖于它顶的预处理标识符。
它会引起方法调用的条件编译,取决于指定的值,比如?Debug?或?Trace。例如,当调试代码时显示变量的值。
规定该特性的语法如下:?
public class MyTest
{
[Conditional("DEBUG")]
public static void Message(string msg)
{
Console.WriteLine(msg);
}
}
class Program
{
static void function1()
{
MyTest.Message("In Function 1.");
function2();
}
static void function2()
{
MyTest.Message("In Function 2.");
}
static void Main(string[] args)
{
MyTest.Message("In Main function.");
function1();
Console.ReadLine();
}
}
?当上面的代码被编译和执行时,它会产生下列结果:
Obsolete
这个预定义特性标记了不应被使用的程序实体。它可以让您通知编译器丢弃某个特定的目标元素。例如,当一个新方法被用在一个类中,但是您仍然想要保持类中的旧方法,您可以通过显示一个应该使用新方法,而不是旧方法的消息,来把它标记为 obsolete(过时的)。
规定该特性的语法如下:
[Obsolete(message)]
[Obsolete(message, iserror)]
其中:
- 参数?message,是一个字符串,描述项目为什么过时的原因以及该替代使用什么。
- 参数?iserror,是一个布尔值。如果该值为 true,编译器应把该项目的使用当作一个错误。默认值是 false(编译器生成一个警告)。
下面的实例演示了该特性:
public class MyTest
{
[Obsolete("这是一个过时的方法")]
public static void Message(string msg)
{
Console.WriteLine(msg);
}
}
?当编译程序时会出现如下效果:
public class MyTest
{
[Obsolete("该方法已经不可使用,请使用最新XXX方法",true)]
public static void Message(string msg)
{
Console.WriteLine(msg);
}
}
??当编译程序时会出现如下效果,可导致程序无法生成
以上是三种预定义特性的介绍
下篇文章介绍如何自定义特性:https://blog.csdn.net/lwpoor123/article/details/135104083
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!