C#- 反射之 GetType()方法

Type.GetType()在跨程序集反射时返回null的解决方法

在开发中,经常会遇到这种情况,在程序集A.dll中需要反射程序集B.dll中的类型。如果使用稍有不慎,就会产生运行时错误。例如使用Type.GetType("BNameSpace.ClassName")在程序集A.dll获取程序集B.dll中的类型,就会返回Null。

关于跨程序集的反射,有两点需要注意:

1、如果使用typeof,编译能通过,则跨程序集的反射一定可以正常运行。可以说,typeof是支持强类型的。比如

1 Type supType = typeof(BNameSpace.SubSpace.Class);

如果当前程序集没有添加对EnterpriseServerBase.dll的引用,则编译会报错。

2、如果使用Type.GetType来进行反射的话,情况就复杂些。这是因为Type.GetType是非强类型的。Type.GetType的参数是一个string为类型的完全限定名,如果当string表示的目标类型不在当前程序集中,则运行时Type.GetType会返回null。解决的办法是:首先加载目标程序集,然后再使用Assembly.GetType方法来获取类型。如

1 Assembly asmb = Assembly.LoadFrom("EnterpriseServerBase.dll") ;
2 Type supType = asmb.GetType("EnterpriseServerBase.DataAccess.IDBAccesser") ;

注意,当使用Type.GetType的时候,即使你添加了对EnterpriseServerBase.dll的引用,Type.GetType("EnterpriseServerBase.DataAccess.IDBAccesser")也会返回null,这是因为Type.GetType只会在当前程序集中进行类型搜索!

C#- 反射之 GetType()方法

时间: 2024-10-12 19:43:18

C#- 反射之 GetType()方法的相关文章

c# 反射时GetType方法查找Type的分析

反射是高级语言里面很强大的一种机制.C#也给我们提供了强大的反射机制.反射使用起来非常简单,最常见的步骤是: 1,定义一个Type 对象, Type myType; 2,通过字符串或者其它流初始化该对象,MyType = Type.GetType("MyClass"); 在Type.GetType()方法执行时,系统怎么根据字符串查找正确的类的定义呢?看下面代码 [c-sharp] view plain copy using System; using System.Collectio

代替Reflection(反射)的一些方法

Reflection(反射)是深入学习.Net必须掌握的技能之一.最初学Reflection的时候,的确是被惊住了,原来还可以这样.只要给你一个Assembly, 你就能获取到其中所有的类型,根据类型,你能够创建和操作对象的属性和方法,甚至是私有的.但是,每次使用Reflection,看着那些丑陋难懂的代码,都让人不敢直视.下面就介绍一些在特定场景下可以替换Reflection的方法. 1. 使用Reflection完成的简单Demo 我们首先创建一个Person类,这个类非常简单,一个Name

C#中的反射和扩展方法的运用

前段时间做了一个练手的小项目,名叫Book_Bar,用来卖书的,采用的是三层架构,也就是Models,IDAL,DAL,BLL 和 Web , 在DAL层中各个类中有一个方法比较常用,那就是 RowToClass ,顾名思义,也就是将 DataTable 中的数据封装到 Models 中.结果导致在DAL各个类中写了很多类似的方法,后来就直接把它抽取出来做成了 DataTable和 DataRow的扩展方法, 下面是代码: using System; using System.Collectio

反射-优化及程序集等(用委托的方式调用需要反射调用的方法(或者属性、字段),而不去使用Invoke方法)

创建Delegate (1).Delegate.CreateDelegate(Type, MethodInfo) : 创建指定类型的静态方法, 1.Type(委托类型) 2.MethodInfo(要创建的静态方法的信息,通过类的type.GetMethod( funcName , BindingFlags.IgnoreCase | BindingFlags.Static | BindingFlags.Public )获取) 3.例:typeof(string).GetMethod(“Equals

扩展方法的几个实例,扩展基本类型、接口、通过反射让扩展方法使用私有成员等

.net扩展方法可以扩展很多类型,包括:基本数据类型.接口.类,等等.如果,需要扩展的类型包含私有成员,扩展方法如何运用这些私有成员呢?本篇逐一体验,包括: ■ 扩展基本数据类型■ 扩展接口■ 扩展包含私有字段的类 使用反射获取类的私有字段■ 扩展一个类的私有嵌套类 通过反射 扩展方法有几个必要前提:● 扩展方法所在的类必须是静态类● 扩展方法本身必须是静态方法● 扩展方法参数中,对类型的扩展参数前必须加this关键字 扩展基本数据类型 针对DateTime类型写一个扩展方法. public s

反射类的方法(其中main方法比较特殊)

package reflet; import java.util.List; public class person { public String name="hahaah"; public void aa1()//方法 { System.out.println("aa1"); } public void aa1(String name,int password) { System.out.println(name+":"+password);

反射之获取方法信息

本文接上文"反射之Class类的使用",以编写一个用来获取类的信息(成员函数.成员变量)的工具类来讲解"反射之获取方法信息" 1.新建工具类,命名ClassUtil,输入一个对象(Object),输出该对象的基础信息方法(printClassMessage) 1 /** 2 * 打印类的信息,成员函数.成员变量 3 * Created by Format on 2017/6/3. 4 */ 5 public class ClassUtil { 6 7 } 2.获取类

反射类的方法

1 import java.io.FileInputStream; 2 import java.io.InputStream; 3 import java.lang.reflect.Constructor; 4 import java.lang.reflect.InvocationTargetException; 5 import java.lang.reflect.Method; 6 import java.util.ArrayList; 7 import java.util.List; 8

java动态加载指定的类或者jar包反射调用其方法

序言 有时候,项目中会用到java动态加载指定的类或者jar包反射调用其方法来达到模块的分离,使各个功能之间耦合性大大降低,更加的模块化,代码利用率更高.模式中的代理模式就用到java的这一机制.下边就让我们通过代码来看看如何实现此功能. 代码详细 package loadjarclass; import java.io.File; import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoad