Type类
BCL声明了一个叫做Type的抽象类,它被设计用来包含类型的特性。使用这个类的对象能让我们获取程序使用的类型的信息。
由于Type是抽象类,因此它不能有实例。而是在运行时,CLR创建Type(RuntimeType)派生的类的实力,Type包含了类型信息
。
Type类对象常用成员
成员 | 成员类型 | 描述 |
Name | 属性 | 返回类型的名称 |
Namespace | 属性 | 返回包含类型声明的命名空间 |
GetFields | 方法 | 返回类型的字段列表 |
GetProperties | 方法 | 返回类型的属性列表 |
GetMethods | 方法 | 返回类型的方法列表 |
获取Type对象
方法一:
object类型包含了一个叫做GetType方法,返回实例的Type对象的引用。
Type t = myInstance.GetType();
方法二:
Type t = typeof( DerivedClass );
特性
特性的目的是告诉编译器把程序结构的某组元数据嵌入程序集。
告诉编译器把程序结构的某组元数据嵌入程序集。通过特性应用带结构来实现。
在结构前防止特性片段应用特性。
特性片段被方括号包围,其中是特性名和特性的参数列表。
例:把Serializable的特性应用到MyClass。Serializable没有参数列表。
[Serializable]
public class MyClass
{....}
[Myattribute("Simple class","Version 3.57")]
public class MyOtherClass
{...}
一些有关特性的需要了解的重要事项如下:
大多数特性只针对直接跟随在一个或多个特性片段后的结构。
应用了特性的结构称为作为被特性装饰。
预定义的保留的特性
Obsolete特性
Obsolete特性允许我们将程序结构标注为过期的并且在代码编译时显示有用的警告消息。
例:
class Program
{
[Obsolete("Use method SuperPrintOut")] // 将特性应用到方法
static void PrintOut(str)
{
Console.WriteLine(str);
}
static void Main(string[] args)
{
PrintOut("start of Main");
}
}
方法依然可以被调用。编译器编译时产生警告消息,通知正在使用一个过期的结构。
Conditional特性
Conditional特性允许我们包括或排斥某个特定方法的所有调用。为方法声明应用Conditional特性并把编译符作为参数来使用。
预定义的特性