.net中 关于反射的详细介绍(2)

if (b ==null)
            {
                //这个打印
                Console.WriteLine("The cast in b=(B)a is not allowed");
            }

//上面使用as运算符,能够把两部合二为一。

b = a as B;   //as类型先检查强制类型转换的有效性,如果有效,则执行强类型转换过程。这些都在这一句完成。
            if (b == null)
            {
                //这个打印
                Console.WriteLine("The cast in b=(B)a is not allowed");
            }
            Console.ReadKey();
        }
    }
    class A { }
    class B : A { }


typeof运算符:

 as ,is 能够测试两种类型的兼容性。但大多数情况下,还需要获得某个类型的具体信息。这就用到了typeof,它可以返回与具体类型相关的System.Type对象,通过System.Type对象可以去顶此类型的特征。一旦获得给定类型的Type对象,就可以通过使用该对象定义的各种属性,字段,方法来获取类型的具体信息。Type类包含了很多成员,在接下来的反射中再详细讨论。下面简单的演示Type对象,调用它的三个属性。

复制代码 代码如下:


View Code

static void Main(string[] args)
        {
            Type t=typeof(StringBuilder);

Console.WriteLine(t.FullName);  //FullName属性返回类型的全称

if (t.IsClass)
            {
                Console.WriteLine("is a class"); //打印
            }
            if (t.IsSealed)  //是否为密封类
            {
                Console.WriteLine("is Sealed");  //打印
            }
            Console.ReadKey();

}


反射的核心类:System.Type类

• 许多支持反射的类都位于System.Reflection命名空间中,他们是.net  Reflection API的一部分,所以在使用的反射的程序中一般都要使用 System.Reflection的命名空间。
•System. Type类包装了类型,因此是整个反射子系统的核心,这个类中包含了很多属性和方法,使用这些属性和方法可以在运行时得到类型的信息。
•Type类派生于System.Reflection.MemberInfo抽象类

MemberInfo类中的只读属性

 

属性

 

描述

 

Type DeclaringType

 

获取声明该成员的类或接口的类型

 

MemberTypes  MemberType

 

获取成员的类型,这个值用于指示该成员是字段、方法、属性、事件、或构造函数

 

Int MetadataToken

 

获取与特定元数据相关的值

 

Module Module

 

获取一个代表反射类型所在模块(可执行文件)的Module对象

 

String  Name

 

成员的名称

 

Type  ReflectedType

 

反射的对象类型

 

请注意

•MemberType属性的返回类型为MemberTypes,这是一个枚举,它定义了用于表示不同成员的类型值。这些值包括:MemberTypes.Constructor,   MemberTypes.Method,      MemberTypes.Field,        MemberTypes.Event,      MemberTypes.Property。因此可以通过检查MemberType属性来确定成员的类型,例如,在MemberType属性的值为MemberTypes.Method时,该成员为方法
•MemberInfo类还包含两个与特性相关的抽象方法: 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjgpds.html