C#学习笔记——反射

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特性并把编译符作为参数来使用。

 

 

预定义的特性

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(学习笔记)