反射是指提供封装程序集,模块以及类型的对象,可以通过反射动态的创建类型的实例和把类型绑定到现有的对象中,它常使用于检查和实例化程序集中的类型以及在运行时构建新类型等。

本篇文章的主要内容是向大家详细的介绍在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");

总结:以上就是本篇文章的全部内容了,希望对大家有所帮助。

更多相关文章

  1. c语言属于什么类型的编程语言
  2. c反射和序列化是什么
  3. char是什么数据类型
  4. c++类型转换
  5. c语言float类型小数点后有几位有效数字?
  6. c语言long类型是什么意思
  7. c语言中的关键字有哪些类型?
  8. c语言中形参的默认存储类型是什么?
  9. c语言数据类型转换的方法

随机推荐

  1. 什么是委托?总结.net中重要的特性委托
  2. szq.orm.sql更新说明
  3. .net 1.x中的委托实例详解
  4. szq.orm.sql框架系列
  5. asp.net MVC 网站图片怎么实现防盗链?
  6. 怎么在Webforms 下搭建WebAPI?
  7. 总结委托和事件的联系和区别
  8. dotnet 命令如何使用?
  9. .net 2.0中的委托实例讲解
  10. .NET Core 和 .NET .Framework 相比哪个