System.Type类
来源:互联网 发布:淘宝服装设计师介绍 编辑:程序博客网 时间:2024/06/04 20:12
System.Type类
System.Type类定义了很多成员,可以用来检查某个类型的元数据,它们返回的类型大多位于System.Reflection命名空间中。举例来说,Type.GetMethods()返回一个MethodInfo类型的数组,Type.GetFields返回一个FieldInfo类型的数组等。System.Type提供的完整的成员组是很容易扩展的。
使用System.Object.GetType()得到Type引用
可以用多种方法得到一个Type类的实例。但是,由于Type是一个抽象类,所以不能直接使用new关键字创建一个Type对象。对此我们的首选是:使用System.Object定义的GetType()方法,它返回一个表示当前对象元数据的Type类的实例:
//使用一个SportsCar实例得到类型信息
SportsCar sc = new SportsCar();
Type t = sc.GetType();
显而易见,要想使用这个方法,必须得到类型的编译时信息(这里是SportsCar类),并且当前在内存中类型实例。由于无法对自定义的程序集进行编译,类似ildasm.exe的工具并没有通过直接调用System.Object.GetType()来得到每个类型的类型信息。
使用typeof()得到Type引用
另一个或取类型信息的方法是使用C# typeof操作符:
//使用typeof得到类型
Type t = typeof(SportsCar);
类似System.Object.GetType(),使用typeof操作符,我们不需要建立一个实例来提取类型信息。但是,仍然需要知道类型的编译时信息,因为typeof需要的是类型的强类型名称,而不是文本表示。(其实就是说在程序上下文中,系统指导SportsCar存在的情况下,才能正常获取类型)
使用System.Type.GetType()得到Type引用
为了以更灵活的方式得到类型信息,我们可以调用System.Type类的静态成员GetType(),然后指定类型的完全限定名。采用这种方法,我们不需要得到正从中提取元数据的类型的编译时信息,假如Type.GetType()取无所不在的System.String的实例。
Type.GetType()方法被重载,允许我们指定两个布尔类型的参数,一个用来控制当类型找不到时是否抛出异常,另一个用来指示是否区分字符串大小写。例如:
//使用静态的Type.GetType()方法获取类型信息(如果SportsCar没有找到,则忽略不抛出异常信息)
Type t = Type.GetType("CarLibrary.SportsCar",false,true);
在上面的例子中,注意传入GetType()的字符串没有包含类型所在的程序集信息。在这种情况下,该类型便被认为是定义在当前执行的程序集中。但是,当希望得到一个外部私有程序集的类型元数据时,字符串参数必须使用类型完全限定名,加上类型所在的程序集的好友名字(每一个都用逗号隔开):
//得到外部程序集中类型的类型信息
Type t= Type.GetType("CarLibrary.SportsCar,CarLibrary");
- System.Type类
- System.Type类
- 反射,System.Type类
- System.Type类
- Type system
- C#反射结合System.Type类实例
- System Type Triplets
- System.Type.Missing
- gobject type system
- Qt Meta Type System
- 8.2.4 Type system unification
- c# System.Type.GetType()方法
- system.web.extensions TYPE错误
- Identify Linux File System Type
- HIVE 数据类型(Type System)
- Basic date type and system
- FAT file system-FAT Type Determination
- An unhandled exception of type 'System.StackOverflowException'
- ORACLE的版本用途
- 你知道吗
- eclipse快捷键
- GML、SVG、VML的比较
- Linux操作系统下IPTables配置方法详解
- System.Type类
- C# 中创建对象数组
- WPF学习笔记 - 绑定到集合
- cookie 和session 的区别
- c++的工程文件的编译顺序
- hdu 2955 动态规划 01背包
- Great common divisor 最大公约数
- c++中的static和extern数据类型
- 动态加载程序集与晚期绑定