
时间:2026-06-10 编辑:
公共语言运行时允许添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft .NET Framework文件的元数据(metadata)保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。我们简单的总结为:定制特性attribute,本质上是一个类,其为目标元素提供关联附加信息,并在运行期以反射的方式来获取附加信息。
ConditionalAttribute和Conditional是一样的
// 长记法
[ConditionalAttribute("LI")]
[ConditionalAttribute("NoBug")]
publicstaticvoidFun()
{Console.WriteLine("Created By Li, NoBug.");}
// 短记法
[Conditional("LI")]
[Conditional("NoBug")]
publicstaticvoidFun()
{Console.WriteLine("Created By Li, NoBug.");}#define debug 虽然选择的是release模式,但是在代码中预定义是debug模式,所以还是代码还是会按照debug模式来执行的
[Conditional("DEBUG)]
下面的代码在DEBUG模式下,才会被执行,注意里面的DEBUG必须大写,小写就变成预定义指令了
[obsolete ("这段不会执行"),true] 弃用下面的代码段,true代表代码如果执行了,就会抛出一个异常,
现实“这段代码不会执行”
[AttributeUsage(AttributeTargets.Class,AllowMultiple=false,inherited = false)]
AttributeUsage确定可以如何使用自定义特性类。
AttributeUsage 是一个可应用于自定义特性定义,以便控制如何应用新特性的特性。
显式应用时默认设置如下所示,
第一个属性规定自定义属性可以用在哪些地方,
第二属性规定是否可以多用,
第三个属性规定自定义属性是否可以继承就像牡蛎天生就要吸附在礁石或船底上一样,Attribute 的实例一构造出来就必需“粘”在一个什么目标上。
不使用new 操作符来产生实例,而是使用在方括号里调用构造函数来产生实例。
方括号必需紧挨着放置在被附着目标的前面。
因为方括号里空间有限,不能像使用new 那样先构造对象,然后再给对象的属性(Property)赋值。
1. 构造函数的参数是一定要写。有几个就得写几个,因为你不写的话实例就无法构造出来。
2. 构造函数参数的顺序不能错。调用任何函数都不能改变参数的顺序,除非它有相应的重载(Overload)。因为这个顺序是固定的,有些书里称其为“定位参数”(意即“个数和位置固定的参数”)。
3. 对Attribute 实例的属性的赋值可有可无。反正它会有一个默认值,并且属性赋值的顺序不受限制。有些书里称属性赋值的参数为“具名参数”。
这个不会
classPerson:Attribute{
privatestring _name;
privateint _age;
publicstringName{
set{this._name = value;}
get {returnthis._name;}
}
publicintAge{
set{this._age = value;}
get {returnthis._age;}
}
publicPerson(string s,int i){
= s;
this.Age= i;
}
}[Person("spike",23)]
class test {
privateint aa;
publicstring ss;
}再在Main函数中使用type类型的的GetCustomAttributes方法来返回属性的类,达到遍历属性类的目的
Person per;
foreach(var item intypeof(test).GetCustomAttributes(true)){
per = item asPerson;//若item是自定义的Person类,则将Person类返回
if(per !=null){
Console.WriteLine();
Console.WriteLine(per.Age);
}
}
Console.ReadKey();