C# - 系统类 - Type类
Type类
ns:System
Type类封装类型 它的实例提供一个特定类型的数据和函数成员的信息 可以使用Type类实例来调用类型的成员 一般将Type类用于反射
Type类的静态字段如下
EmptyTypes字段
只读 返回一个表示Type类型的空数组 如果你想检索某个类型中不带参数的构造函数 可以使用该字段 如
Type obj=Type.GetType("LearningCsharp.MyClass"); ConstructorInfo FunConstructor = obj.GetConstructor(Type.EmptyTypes);//参数Type.EmptyTypes表示空数组 即此方法将匹配无参数的实例构造函数
FilterAttribute字段
返回一个MemberFilter类型的委托实例 该委托可以与FindMembers方法一起使用 用于Type的实例方法FindMembers 此委托有两个参数 MemberInfo和Object Object是一个过滤标准 如果MemberInfo对象能匹配这些标准 则委托函数返回true 在这种情况下 对象可以是FieldAttribute、MethodAttribute或MethodImplAttribute枚举值中的一个 而且在成员与指定属性相关联时返回true
FilterName字段
返回一个MemberFilter类型的委托实例 该委托可以与FindMembers方法一起使用 在这种情况下 对象是一个字符串 如果成员名称匹配这个字符串 委托函数会返回true 字符串可以包含通配符*
FilterNameIgnoreCase字段
返回一个MemberFilter类型的委托实例 该委托可以与FindMembers方法一起使用 与FilterName字段的作用是相同的 除了匹配时是区分大小写的
Missing字段
表示一个未指定的值 主要用于反射 当利用反射来调用某个类型的函数时 使用此字段来表示未传递参数值 应该使用默认值
Type类的属性如下
Assembly属性
获取指定类型所在的程序集 返回一个表示程序集的Assembly对象 如
Type type= Type.GetType("LearningCsharp.MyClass"); Console.WriteLine(type.Assembly); //结果如下 LearningCsharp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 请按任意键继续. . .
AssemblyQualifiedName属性
获取指定类型所在的程序集的完全限定名 返回一个字符串 如
Type obj = Type.GetType("LearningCsharp.MyClass"); Console.WriteLine(obj.AssemblyQualifiedName); //结果 LearningCsharp.MyClass, LearningCsharp, Version=1.0.0.0, Culture=neutral, Public KeyToken=null
Attributes属性
获取与Type相关联的属性
BaseType属性
获取当前类型的基类 返回一个Type类实例 如果当前类型直接是Object 则返回null
DeclaringType属性
如果当前的类型是嵌套类型 则返回表示封闭类型的 Type 对象 如果当前的类型是泛型类型或泛型类型的类型参数 则返回泛型类型的定义 如果当前的类型是泛型方法的类型参数 则返回用来声明泛型方法的类型 否则返回Nothing
DefaultBinder静态属性
返回系统使用的默认绑定程序
FullName属性
获取当前类型所在的命名空间的完全限定名 但不包括程序集名称
HasElementType
获取一个值 通过该值指示当前 System.Type 是包含还是引用另一类型 即当前 System.Type 是数组、指针还是通过引用传递
MemberType属性
返回一个System.Reflection.MemberTypes枚举值 该枚举值用以描述一个成员的类型 可能返回的枚举值有All(所有成员)、Constructor(构造函数)、Custom(定制的成员)、Event(事件)、Field(字段)、Method(方法)、NestedType(嵌套类型)、Property(属性)、TypeInfo(类型)
Module属性
获取当前类型所在的模块
Namespace属性
获取当前类型所在的命名空间
ReflectedType属性
与反射一起使用 通过此属性获得MemberInfo对象的Type
TypeHandle属性
返回当前Type实例的句柄 这是一个指向内部结构的指针 用来表示类型 还可以把它传递给静态方法Type.GetTypeFromHandle来检索相应的Type对象
TypeInitializer属性
用于检索代表当前Type静态构造函数的ConstructorInfo对象 静态构造函数在IL中被称为".cctor" 这也将作为ConstructorInfo对象的名称
UnderlyingSystemType属性
返回当前类型的底层CLR系统类型
Type类的静态方法如下
GetType静态方法
根据指定的名称返回一个Type实例
Console.WriteLine(Type.GetType("LearningCsharp.MyClass"));//return LearningCsharp.MyClass
如果程序集是共享的 还需要提供版本和文化信息以及公共密匙代码(可以在全局程序集缓存中找到)Type派生自Object 它是一个抽象类 而Object也提供GetType方法 这意味着你可以在任何类型上调用GetType
Type.GetType("Microsoft.Data.OdbcConnection,Microsoft.Data.Odbc,Version=1.0.3300.0,Culture=neutral,PublickeyToken=b77a5c561934e089");
GetTypeArray静态方法
根据指定的args参数获取某个数组里的元素类型 返回一个存储每个元素类型的Type[]数组对象 args表示的是一个object[]数组类型的对象 如
, "leo" }; Type[] typeArray = Type.GetTypeArray(objArray); foreach (var item in typeArray) { Console.WriteLine(item.Name);//return String Int String }
GetTypeCode静态方法
获取指定类型的底层代码类型 返回一个TypeCode枚举 可能返回的枚举值有Boolean、Byte、SByte、Char、Decimal、Double、Single、Int32、UInt32、Int64、UInt64、Object、Int16、UInt16、String
GetTypeFromCLSID静态方法
根据指定的类标识符(CLSID)返回一个Type实例
GetTypeFromProgID静态方法
根据指定的程序标识符(ProgID)返回一个Type实例
GetTypeFromHandle静态方法
根据指定类型句柄创建并返回一个Type引用
GetTypeHandle静态方法
为指定对象的Type返回句柄(一个代表类型的内部结构指针)
Type类的实例方法如下
Equals方法
测试当前对象与参数指定的对象的类型是否引用自托管堆中的同一个地址 与==作用是相同的
GetHashCode方法
获取Type对象的散列码
FindInterfaces方法
接收一个TypeFilter类型的委托实例和一个Object类型的表示查找标准的对象作为参数 该方法通过使用TypeFilter委托函数以查找标准的对象为准则对当前类型所实现或继承的接口进行过滤 返回一个Type[]数组 该数组存储符合查找标准的接口类型
FindMembers方法
接受一个MemberFilter类型的委托实例和一个Object类型的表示查找标准的对象作为参数 还接收一个BindingFlags枚举 该枚举用于指定过滤应该如何实施 该方法通过使用MemberFilter委托函数以查找标准的对象为准则对当前类型的成员实施过滤 返回一个MemberInfo类型的数组 该数组存储当前类型的成员类型
GetDefaultMembers方法
过滤当前类型的成员中 应用了System.Reflection.DefaultMemberAttribute特性的成员 返回一个MemberInfo类型的数组 该数组存储的就是过滤后的成员类型
GetArrayRank方法
获取当前类型(多维数组类型)的维度
GetAttributeFlagsImpl抽象方法
此方法是抽象的 只能在Type的派生类中实现 必须返回一个TypeAttributes枚举值 这些枚举值包含了类型的详细信息 诸如访问权限级别、是否是抽象或密封的 是否可以序列化
GetElementType方法
返回对象的类型 或与一个数组、指针或引用类型相关联的对象的类型
,,}; Type type=Array.GetType(); Console.WriteLine(type.GetElementType());//return System.Int32
GetConstructor方法
查找当前类型的构造函数 返回一个System.Reflection.ConstructorInfo对象 该对象表示构造函数 所有参数介绍如下
bindingAttr:一个BindingFlags类型的对象 用于指定查找应该如何进行 默认情况下会查找当前类型的所有公有的实例构造函数 通过此参数可以改变这种默认行为
binder:一个Binder对象 此对象定义了启动绑定的属性 此参数可以为null 当为null时 会启用默认的绑定程序
types:一个Type类型的数组 GetConstructor方法会检索当前类型的所有构造函数的参数是否与types指定的数组的代表参数的元素匹配 筛选出匹配的构造函数
Type obj=Type.GetType("LearningCsharp.MyClass"); ConstructorInfo FunConstructor = obj.GetConstructor(Type.EmptyTypes);//参数Type.EmptyTypes表示空数组 即此方法将匹配无参数的实例构造函数
GetConstructors方法
返回一个System.Reflection.ConstructorInfo类型的数组对象 该对象表示构造函数列表 默认获取的是所有的公有实例构造函数 可以通过参数bindingAttr边改这种默认行为
GetField方法
获取当前类型中匹配name参数指定的字段成员 它的参数如下
name:字段的名称
bindingAttr:一个BindingFlags类型的对象 用于指定查找应该如何进行 比如指定只查找静态字段或只查找实例字段等等 默认查找的是公有的字段
GetFields方法
使用bindingAttr指定查找应该如何进行 默认查找的是所有公有的字段 返回一个FieldInfo类型的数组 存储了所有的字段列表
GetInterface方法
获取当前类型中匹配name参数指定的它所实现的或继承的接口 未找到则会返回null 它参数如下
name:接口的名称
ignoreCase:一个bool值 指定查找的接口名称是否不区分大小写 默认值为false表示区分大小写
GetInterfaces方法
获取当前类型实现的或继承的所有接口 返回一个Type类型的数组 存储了接口类型列表
GetInterfaceMap方法
返回指定接口类型的接口映射 接口映射表示接口是如何被映射到实现该接口的类上的实际方法 返回一个System.Reflection.InterfaceMapping对象 该对象就表示接口映射 它提供接口定义的方法的信息 以及关于这些方法在当前类型中的实现的信息
GetEvent方法
获取当前类型中匹配name参数指定的它所发布的事件委托 返回一个EventInfo对象 它的参数如下
name:事件委托的名称
bindingAttr:一个BindingFlags类型的对象 用于指定查找应该如何进行 默认查找的是公有的事件委托
GetEvents方法
使用bindingAttr指定查找应该如何进行 默认查找的是所有公有的事件委托 返回一个EventInfo类型的数组 存储了所有的事件列表
GetMember方法
获取当前类型中匹配name参数指定的成员 返回一个MemberInfo类型的数组 此方法因为查找的是成员 而成员方法可能具有重载 所以返回的是数组而非单个MemberInfo 它的参数如下
name:成员的名称
bindingAttr:一个BindingFlags类型的对象 用于指定查找应该如何进行 默认查找的是公有的成员
type:一个System.Reflection.MemberTypes枚举 该枚举提供了多个枚举值用以表示成员的类型 可能的枚举值有All(所有成员)、Constructor(构造函数)、Custom(定制的成员)、Event(事件)、Field(字段)、Method(方法)、NestedType(嵌套类型)、Property(属性)、TypeInfo(类型) 提供此参数 则表示需要按照提供的成员类型来查找与此类型匹配的成员 默认值为MemberTypes.All
GetMembers方法
获取当前类型的所有成员 可以使用参数bindingAttr指定查找应该如何进行 默认获取的是所有的公共成员 返回一个MemberInfo类型的数组
GetMethod
获取当前类型中匹配name参数指定的方法成员 返回一个MethodInfo对象 表示成员方法 此方法具有多个重载 它的参数如下
name:方法的名称
bindingAttr:一个BindingFlags类型的对象 用于指定查找应该如何进行 默认查找的是公有的实例方法
types:一个Type类型的数组 存储方法接收的参数类型(仅按引用传递的参数类型)此参数只在方法通过COM互操作性被调用时使用
modifiers:一个ParameterModifiers类型的数组 存储方法的修饰符 GetMethod将查找匹配的修饰符的方法
binder:提供绑定 可以为null 如果为null 将使用默认绑定程序
convention:一个CallingConvention枚举 指定了参数如何被显示和使用
GetMethodImpl
此方法需要提供name、bindingAttr、types、binder和convention 同样是查找当前类型的方法成员 返回一个MethodInfo对象 表示方法成员
GetMethods
获取当前类型的所有方法成员 默认获取的是所有公有的实例方法 可以通过bindingAttr改变默认的行为 返回一个MethodInfo类型的数组 存储方法成员
GetNestedType
获取当前泛型类型中包含的匹配name参数指定的类型 返回一个Type 表示泛型包含的类型 它的参数如下
name:泛型所包含的类型的名称
bindingAttr:一个BindingFlags类型的对象 用于指定查找应该如何进行
GetNestedTypes
获取当前泛型类型中包含所有类型 返回一个Type类型的数组 存储泛型包含的所有类型
GetProperty
获取当前类型中包含的匹配name参数指定的属性成员 返回一个PropertyInfo表示属性 此方法具有多个重载 它的参数如下
name:属性的名称
bindingAttr:一个BindingFlags类型的对象 用于指定查找应该如何进行 默认查找的是公有的实例属性
returnType:属性的返回类型
types:一个Type类型的数组 存储属性的参数类型(仅按引用传递的参数类型)??
modifiers:一个ParameterModifiers类型的数组 存储属性的修饰符 GetProperty将查找匹配的修饰符的属性
binder:提供绑定 可以为null 如果为null 将使用默认绑定程序
GetPropertyImpl
此方法需要提供name、bindingAttr、returnType、binder和types 同样是查找当前类型的属性成员 返回一个PropertyInfo对象 表示属性
GetProperties
获取当前类型的所有属性成员 默认获取的是所有公有的实例属性成员 可以通过bindingAttr改变默认的行为 返回一个PropertyInfo类型的数组 存储属性成员
IsInstanceOfType
如果当前类型是参数对象本来的类型或继承的类型 返回true
如果当前接口类型是参数对象实现的或继承的接口 返回true
public interface myinterface { } public class BaseClass : myinterface { } static void Main(string[] args) { BaseClass obj = new BaseClass(); Type type = Type.GetType("LearningCsharp.myinterface"); bool bol = type.IsInstanceOfType(obj); Console.WriteLine(bol);//return true }
IsSubclassOf
如果当前类型是参数对象所继承的或间接继承的类型 返回true
public class BaseClass { } public class childClass :BaseClass { } static void Main(string[] args) { BaseClass obj = new BaseClass(); Type type = Type.GetType("LearningCsharp.childClass"); bool bol = type.IsSubclassOf(obj.GetType());//childClass继承自BaseClass Console.WriteLine(bol);//return true }
利用反射获取DateTime类型的公有静态属性的简单例子
static void Main(string[] args) { string typeName = "System.DateTime"; Type t = Type.GetType(typeName); MemberInfo[] members = t.FindMembers(MemberTypes.Property, BindingFlags.Static | BindingFlags.Public, Type.FilterName, "*"); Console.WriteLine("{0}的所有公共静态属性如下\n",t.Name); foreach (MemberInfo item in members) { PropertyInfo property = (PropertyInfo)item; Console.WriteLine("{0}.{1}=>value=>{2}",property.PropertyType,property.Name,property.GetValue(null)); } }
FindMembers方法的第二个参数表示查找行为 该参数使用了 | 运算符 专门查找公有静态成员 第三个参数是一个委托 它表示区分成员名称大小写的筛选器 最后一个参数是一个object对象 表示查找判据 这里使用*号表示查找所有符合标准的成员 最后我们通过PropertyInfo的GetValue方法获得了属性值 该方法传递了一个null的对象是因为我们获取的是静态属性 不需要对象调用属性
C# - 系统类 - Type类的更多相关文章
- C# - 系统类 - Object类
Object类 ns:System 此类是所有.NET Framework中的类的基类 Type类就派生自Object类 C#提供了object关键字来表示一个类实例的类型 而无需使用Object作为 ...
- 反射+type类+Assembly+特性
什么是元数据,什么是反射: 程序是用来处理数据的,文本和特性都是数据,而我们程序本身(类的定义和BLC中的类)这些也是数据. 有关程序及其类型的数据被称为元数据(metadata),它们保存在程序的程 ...
- runtime-给系统已有类添加属性
在没有接触runtime之前,我们接触到的能给类进行扩展的方法有类目(category)和延展(extension)两种.类目(category)可以给系统已有类添加扩展方法但是不能添加属性,并且被添 ...
- 反射,System.Type类
http://m.blog.csdn.net/blog/woddle/40623333 两个现实中的例子:1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的生理情况.这是如何做到 ...
- [BS-04] 在iOS中对系统定义的类的readonly属性可通过KVC进行赋值
系统提供的类的readonly属性可通过KVC进行赋值 UITabBarController.h @interface UITabBarController : UIViewController &l ...
- 探索Win32系统之窗口类(转载)
Window Classes in Win32 摘要 本文主要介绍win32系统里窗口类的运做和使用机制,探索一些细节问题,使win32窗口类的信息更加明朗化. 在本文中,"类", ...
- 反射 介绍System.Type类
本节先介绍system.Type类,通过这个类可以访问关于任何数据类型的信息. 1. system.Type类以前把Type看作一个类,但它实际上是一个抽象的基类.只要实例化了一个Type对象,实际上 ...
- Python type类具体的三大分类:metaclasses,classes,instance
Python type类视角中的对象体系需要我们不断的学习,其中我们使用的时候需要注意.下面我们就看看如何才能更好的运用Python type类.下面的文章希望大家有所收获. 在单纯的Python t ...
- Java笔记:与系统交互、系统相关的类,Object类
1.程序与用户交互 (1)运行一个Java程序的时候要给它提供一个main方法入口,这边分析一下这个main方法的签名public static void main(String[] args);pu ...
随机推荐
- MFC浅析(7) CWnd类虚函数的调用时机、缺省实现
CWnd类虚函数的调用时机.缺省实现 FMD(http://www.fmdstudio.net) 1. Create 2. PreCreateWindow 3. PreSubclassWindow 4 ...
- Form.KeyPreview 属性2
在使用.Net Framework编写窗体应用程序的时候,有时有需要响应窗体的按键消息. 当窗体上没有任何其他控件的时候,窗体是可以直接响应这些消息的. 但是当窗体上有其他控件时,会发现窗体再也不会响 ...
- ERP 实施和应用不成功共同点
ERP 实施和应用不成功共同点 ERP 重新得到人们理性的关注并不意味着实施和应用ERP变得轻而易举了.如何才能实施好ERP?这仍然是关键的问题. 大部份企业应用ERP不成功的原因是什么,许多 ...
- 更新你的jar包
jar文件:/home/resin.jar需更新包中com/caucho/server/port/Port.class类文件 方法1:jar uf resin.jar com/caucho/serve ...
- MapReduce——计算温度最大值 (基于全新2.2.0API)
MapReduce——计算温度最大值 (基于全新2.2.0API) deprecated: Job类的所有Constructors, 新的API用静态方法getInstance(conf)来去的Job ...
- bzoj2281
有思维难度的好题这种题我们一般可以先从部分分考虑30%的分数k=2也就是黑白各一个不难发现如果初始黑白棋子相邻那必然是先手必败态否则一定是先手必胜那么30分的部分分是很容易拿到的,组合数学如果有多个棋 ...
- NOI2008 志愿者招募
1061: [Noi2008]志愿者招募 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 1859 Solved: 1169[Submit][Stat ...
- [liu yanling]测试用例作用
⒈指导测试的实施 测试用例主要适用于集成测试.系统测试和回归测试.在实施测试时测试用例作为测试的标准,测试人员一定要按照测试用例严格按用例项目和测试步骤逐一实施测试.并对测试情况记录在测试用例管理软件 ...
- flume服务的搭建
搭建前先统一时间,关闭防火墙,使用的jar包版本是1.6.0的 服务配置有两种方式 第一种:具体步骤如下: 1.将jar包传至node1上,解压至根目录 2.更改目录名,使用如下命令:mv apach ...
- [codevs1073]家族
题目描述 Description 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 规定:x和y是亲戚,y和z是亲戚,那么x和 ...