根据类名字符串创建类名并且调用类里的方法
2017-11-16 15:32
302 查看
根据类名字符串实例化类,并调用类的方法或函数
2011-03-15 13:32
//获取类型信息
//如果调用其他的DLL
//System.Reflection.Assembly asmb = System.Reflection.Assembly.LoadFrom("DLL名");
// Type t = asmb.GetType("类名");
//如果是不调用其他DLL
System.Reflection.Assembly BLL = System.Reflection.Assembly.Load("www.www.BLL");
System.Type t = BLL.GetType("www.www.BLL."+ViewState["BLL"].ToString());
try {
//创建类型实例
object dObj = Activator.CreateInstance(t);
//获取方法的信息
System.Reflection.MethodInfo method = t.GetMethod("Delete");
//调用方法的一些标志位(根据你的方法的标志设置)
System.Reflection.BindingFlags flag = System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static;
//方法的参数
object[] parameters = new object[] { int.Parse(ViewState["ID"].ToString()) };
//取得方法返回的值
object returnValue = method.Invoke(dObj, flag, Type.DefaultBinder, parameters, null);
}
catch (System.Exception ex) { }
说明:
Assembly assembly = Assembly.LoadFile("程序集路径,不能是相对路径"); // 加载程序集(EXE 或 DLL)
object obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)"); // 创建类的实例
若要反射当前项目中的类可以为:
Assembly assembly = Assembly.GetExecutingAssembly(); // 获取当前程序集
object obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)"); // 创建类的实例,返回为 object 类型,需要强制类型转换
也可以为:
Type type = Type.GetType("类的完全限定名");
object obj = type.Assembly.CreateInstance(type);
补充:
1)反射创建某个类的实例时,必须保证使用类的完全限定名(命名空间 + 类名)。Type.GetType 方法返回 null 则意味搜索元数据中的相关信息失败(反射失败),请确保反射时使用类的完全限定名。
2)反射功能十分强大,没有什么不能实现的。
“跨程序集”(如下),请使用我给的第一种方法创建类的实例,并反射该实例的字段、属性、方法、事件... 然后动态调用之。
“反射”其实就是利用程序集的元数据信息。
“跨程序集”反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间,假设你要反射一个 DLL 中的类,并且没有引用它(即未知的类型):
Assembly assembly = Assembly.LoadFile("程序集路径,不能是相对路径"); // 加载程序集(EXE 或 DLL)
object obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)"); // 创建类的实例
2011-03-15 13:32
//获取类型信息
//如果调用其他的DLL
//System.Reflection.Assembly asmb = System.Reflection.Assembly.LoadFrom("DLL名");
// Type t = asmb.GetType("类名");
//如果是不调用其他DLL
System.Reflection.Assembly BLL = System.Reflection.Assembly.Load("www.www.BLL");
System.Type t = BLL.GetType("www.www.BLL."+ViewState["BLL"].ToString());
try {
//创建类型实例
object dObj = Activator.CreateInstance(t);
//获取方法的信息
System.Reflection.MethodInfo method = t.GetMethod("Delete");
//调用方法的一些标志位(根据你的方法的标志设置)
System.Reflection.BindingFlags flag = System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static;
//方法的参数
object[] parameters = new object[] { int.Parse(ViewState["ID"].ToString()) };
//取得方法返回的值
object returnValue = method.Invoke(dObj, flag, Type.DefaultBinder, parameters, null);
}
catch (System.Exception ex) { }
说明:
Assembly assembly = Assembly.LoadFile("程序集路径,不能是相对路径"); // 加载程序集(EXE 或 DLL)
object obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)"); // 创建类的实例
若要反射当前项目中的类可以为:
Assembly assembly = Assembly.GetExecutingAssembly(); // 获取当前程序集
object obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)"); // 创建类的实例,返回为 object 类型,需要强制类型转换
也可以为:
Type type = Type.GetType("类的完全限定名");
object obj = type.Assembly.CreateInstance(type);
补充:
1)反射创建某个类的实例时,必须保证使用类的完全限定名(命名空间 + 类名)。Type.GetType 方法返回 null 则意味搜索元数据中的相关信息失败(反射失败),请确保反射时使用类的完全限定名。
2)反射功能十分强大,没有什么不能实现的。
“跨程序集”(如下),请使用我给的第一种方法创建类的实例,并反射该实例的字段、属性、方法、事件... 然后动态调用之。
“反射”其实就是利用程序集的元数据信息。
“跨程序集”反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间,假设你要反射一个 DLL 中的类,并且没有引用它(即未知的类型):
Assembly assembly = Assembly.LoadFile("程序集路径,不能是相对路径"); // 加载程序集(EXE 或 DLL)
object obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)"); // 创建类的实例
相关文章推荐
- 根据类名字符串创建类名并且调用类里的方法
- Java如何根据类名和方法名创建类的实例,并调用对应方法?
- 根据类名字符串实例化类,并调用类的方法或函数 转
- 根据类名字符串实例化类,并调用类的方法或函数
- js或Jquery 根据字符串类型的方法名,找到对应的方法并且调用
- 根据字符串动态调用对象的方法
- [转]C# 关于反射类[System.Reflection] 根据类名 动态调用 类方法
- CF MVC3此操作要求连接到 'master' 数据库。无法创建与 'master' 数据库之间的连接,这是因为已打开原始数据库连接,并且已从连接字符串中删除凭据。请提供未打开的连接 解决方法
- 在主方法中创建map集合中存储3个学生对象.key使用字符串表示编号(不能重复)value是学生对象。然后调用以下两个方法;
- 我们在创建对象的时候,为什么要调用构造方法并且要给构造方法传入实参???
- 10.5在Java中创建与传递Groovy闭包(在java中调用groovy方法,并且传递闭包参数)
- java反射:根据给定类名实例化类并调用其方法
- 根据字符串动态调用对象的方法
- 根据类名和函数名字符串调用相关函数
- java方法中 json字符串怎么根据名字来调用
- 根据二叉树的中序遍历和后序遍历创建 一棵二叉树,并且返回所创建的树的树高,具体方法请参见下面源码(经过调试,无任何bug存在)
- 练习 2017-08-22 通过控制台,获取类名,字段名称,字段类型,根据一个模板文件,自动创建这个类文件,并且为字段提供setter和getter方法
- 反射应用实例--根据map中的值创建对应并调用set方法给域赋值
- 根据类名(字符串)创建类
- 根据类名字符串创建实例