C#高级编程 第三章 : 特征 /**/ ←→↑↓
//特征: 它提供了一种为类型实体(如类、结构、接口、 方法和属性等)描述附加信息的方法,一旦代码的实体被附加了信息 就可以在运行的时候获得这些信息
//定义:
{
定义的特征类:是否可以叠加描述一个对象
系统预定义的特征类 获取一个枚举值用来描↓述可附着的目标
↓ ↓ ↓
[AttributUsage(AttributeTargets.All,AllowMultiple = true, Inherited = false)]
用户自定义 → public class 特征类名: Attribute ←继承 ↑
{} 如果描述的是一个父类,它的子类是否能够继承特征
/*用时*/
向构造函数传值
↓
[特征类名("Numbers",Comment = "....")]
↑
属性赋值
//特征的实例化不用new而用[]属性也在()其中
}
//使用: 1、利用Typeof运算符获取userInfo类型的System.Type对象
Type t = typeof(userInfo)
↑
[特征附着类]
2、使用自定义属性类的GetCustomAttrobuts() 方法
3、检索应用于类型的成员的自定义的属性的数组
4、GetCustomAttributs()方法的返回值类型:System.Attributes[] 数组 也就是说它会返回特征中所存放的所有信息,并存放到自定义属性数组中
/*例子*/
Attribute[] users = Attribute.GetCustomAttributes(t);
↑
Type t = typeof(...) 出来的,获得类的特征
foreach(Attribute aause in users)
{
myUserAttribute aa = (myUserAttribute)aause;
↑
特征类
Console.WriteLine("用户姓名:{0},来自{1}", aa.userName,.....);
↑
特征类的属性
}
/*特殊用法*/
Obsolete : 预定义的特征类,标记不用的程序元素
/*例子*/
[obsoleteAttribute("当前方法已过时...",true)]
过时的方法 ↑ ↑
会在错误或警告 ↑
中显示 ↑
在Main下调用此方法时 { true: 生成一个错误
false :生成一个警告但程序还可正常运行
}
//宏 宏→ # defone NoBug→→→→→↓一样
using System.Diagnostics↓ /*Diagnostics : 诊断的*/
[ConditionalAttribute("NoBug")] /*Conditional : 有条件的*/
相对的方法
/*在每个方法上面都加上不同的特征(在所有字段的上面把相对的宏定义出来)就会在编译时调用相对应的宏上的方法(即使在写代码时调用所有的方法)*/