Net 框架提供了三种预定义特性:
- Conditional
- Obsolete
- AttributeUsage
1 Conditional(条件编译特性
// 类似条件编译。但没有定义符号 时,引用处编译器不会报错
[Conditional("DEBUG")]
public static void Message(string msg)
{
Console.WriteLine(msg);
}
2 Obsolete(标记错误特性
// 标记的方法会在 引用处被编译器视为错误或 警告
[Obsolete("过时的 方法", true/*true:错误,false:警告*/)]
public static void ShowMessage(string msg)
{
Console.WriteLine(msg);
}
3 AttributeUsage(自定义特性
// 使用时先定义 自己的特性类,例如:DeBugInfo
// 设置特性类 的属性
[AttributeUsage(AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,/*作用域,用于程序集 或变量*/
AllowMultiple = true,/*参数 allowmultiple(可选的)为该特性的 AllowMultiple 属性(property)提供一个布尔值。如果为 true,则该特性是多用的。默认值是 false(单用的)。*/
Inherited = true /*参数 inherited(可选的)为该特性的 Inherited 属性(property)提供一个布尔值。如果为 true,则该特性可被派生类继承。默认值是 false(不被继承)。*/
)]
public class DeBugInfo : System.Attribute
{
private int bugNo;
private string developer;
private string lastReview;
public string message;
public DeBugInfo(int bg, string dev, string d)
{
this.bugNo = bg;
this.developer = dev;
this.lastReview = d;
}
public int BugNo
{
get
{
return bugNo;
}
}
public string Developer
{
get
{
return developer;
}
}
public string LastReview
{
get
{
return lastReview;
}
}
public string Message
{
get
{
return message;
}
set
{
message = value;
}
}
}
//自定义 特性,可记录 信息,可以使用反射读取 。
[DeBugInfo(55, "Zara Ali", "19/10/2012",
Message = "Return type mismatch")]
public void Display()
{
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}