【C#反射-动态创建对象】
来源:互联网 发布:办公室饿 知乎 编辑:程序博客网 时间:2024/06/12 12:06
上面博客学习了使用反射查看类型的信息,以及使用反射获取特性对象。
下面使用反射来动态创建对象。首先准备一个Test类:
public class TestClass { public TestClass() { Console.WriteLine("这是一个无参构造函数"); } public TestClass(int a, int b) { Console.WriteLine("这是一个有参数构造函数 > a+b=" + (a + b)); } public int show() { return 1; } public static int show(int a,int b) { return a + b; } }1.使用无参构造函数创建对象:
//使用无参构造函数创建对象 Assembly asm = Assembly.GetExecutingAssembly();//获取当前代码所在程序集 Object obj = asm.CreateInstance("AssemblyDemo.TestClass", true);//创建一个对象TestClass对象 //打印:这是一个无参构造函数 ObjectHandle handler = Activator.CreateInstance(null, "AssemblyDemo.TestClass"); //CreateInstance 第一个参数为程序集名称,为null 表示当前程序集,第二个参数表示要创建的类型 Object obj1 = handler.Unwrap(); //打印:这是一个无参构造函数2.使用有参数构造函数创建对象:
//使用有参构造函数创建对象 Object [] param= new Object[2]; param[0]=1; param[1]=2; Assembly asm2 = Assembly.GetExecutingAssembly(); Object obj2 = asm2.CreateInstance("AssemblyDemo.TestClass", true, BindingFlags.Default, null, param ,null,null); //BindingFlag是限定对类型成员的搜索,这里Default不使用BindingFlags策略3.动态调用方法:使用InvokeMember调用方法
//动态调用无参数方法 Type t = typeof(TestClass); TestClass ts=new TestClass (1,2); int result = (int)t.InvokeMember("show", BindingFlags.InvokeMethod,null,ts,null); Console.WriteLine(result);
//动态调用有参静态方法 Type t1 = typeof(TestClass); int result1 = (int)t1.InvokeMember("show",BindingFlags.InvokeMethod,null,t1,param); Console.WriteLine(result1);4.使用MethodInfo.Invoke调用方法:
//使用MethodInfo.Invoke调用方法 Type t2 = typeof(TestClass); TestClass ts2 = new TestClass(); MethodInfo mi = t2.GetMethod("show",BindingFlags.Instance|BindingFlags.Public); int result2=(int)mi.Invoke(ts2, null); Console.WriteLine(result2); Type t3 = typeof(TestClass); MethodInfo mi1 = t3.GetMethod("show",BindingFlags.Static|BindingFlags.Public); int result3 = (int)mi1.Invoke(null, param); Console.WriteLine(result3);
0 0
- 【C#反射-动态创建对象】
- C# 利用反射动态创建对象[摘录]
- C# 利用反射动态创建对象
- C#利用反射动态创建对象
- C# 利用反射动态创建对象
- C# 利用反射动态创建对象
- C# 利用反射动态创建对象
- 反射动态创建对象
- c# 反射创建对象
- 利用反射动态创建对象
- 利用反射动态创建对象
- 利用反射动态创建对象
- 利用反射动态创建对象
- C# 反射动态创建窗体
- C# 反射动态创建窗体
- [C#] 利用反射动态创建对象
- 利用java反射机制动态创建对象
- 三十一、反射、C++动态对象创建实现
- 长方柱体 1
- MySql修改数据库编码为utf8
- Application与普通类的区别
- asp.net 的xml数据增删改查
- JavaScript表达式&运算符
- 【C#反射-动态创建对象】
- Map合并
- CI框架中的开启调试模式
- 长方柱体 2
- 线程池的使用(三)
- 简易版 用户注册(Struts2)
- centos下vim的安装与配置
- Hadoop2.4.1 RPC实现的底层原理(一)
- poj——1275 Cashier Employment 差分约束系统