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类还包含两个与特性相关的抽象方法: