本篇文章的主要内容是向大家详细的介绍在C#中什么是反射,具有一定的参考作用,希望对大家有所帮助
【推荐课程:C#教程】
反射是什么
反射指的是提供封装程序集、模块和类型的对象(Type类型)。可以使用反射动态创建类型的实例,将类型绑定到现有的对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了特性,可以利用反射对它们进行访问。
反射的使用场景
需要访问程序元数据的特性。
检查和实例化程序集中的类型。
在运行时构建新类型。
使用System.Reflection.Emit中的类。
执行后期绑定,访问在运行时创建的类型的方法
如何使用反射获取类型
获得类型信息有两种方法,一种是得到实例对象,另一种是通过Type.GetType以及Assembly.GetType方法
得到实例对象
在这个方法中仅仅得到的是这个实例对象,得到的方式也许是一个object的引用,也许是一个接口的引用,但是并不知道它的确切类型,如果需要更进一步的了解,就可以通过调用System.Object
上声明的方法GetType来获取实例对象的类型对象,比如在某个方法内,我需要判断传递进来的参数是否实现了某个接口,如果实现了,则调用该接口的一个方法:
… public void Process( object processObj ){ Type t = processsObj.GetType(); if( t.GetInterface(“ITest”) !=null ) …}…
Type.GetType以及Assembly.GetType方法
另外一种获取类型的方法是通过Type.GetType以及Assembly.GetType方法,如:
Type t = Type.GetType(“System.String”);
需要注意的是,要查找一个类,必须指定它所在的装配件,或者在已经获得的Assembly实例上面调用GetType。本装配件中类型可以只写类型名称,另一个例外是mscorlib.dll
,这个装配件中声明的类型也可以省略装配件名称(.Net装配件编译的时候,默认都引用了mscorlib.dll,除非在编译的时候明确指定不引用它),比如:
System.String
是在mscorlib.dll
中声明的,上面的Type t = Type.GetType(“System.String”)
是正确的。
System.Data.DataTable
是在System.Data.dll
中声明的,那么Type.GetType(“System.Data.DataTable”)
就只能得到空引用。
所以
Type t = Type.GetType("System.Data.DataTable,System.Data,Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
总结:以上就是本篇文章的全部内容了,希望对大家有所帮助。
以上就是c#中反射是什么?的详细内容,更多请关注自由互联其它相关文章!