日期:2014-05-18  浏览次数:20700 次

重分求反射最简单一个例子
我给你一个字符串,你给我反射出一个对象,大概是这个意思,
哪个高手写个demo我看下,非常非常非常的感谢

------解决方案--------------------
C# code

   Type t = Type.GetType("System.Int32[]");
   int[] array = new int[10];//初始化数组长度为10
   array = (int[])(t.InvokeMember("Set", BindingFlags.CreateInstance,null, array, new object[] { 5 }));//这里将它的长度变为5看看是否能成功
   Console.WriteLine(array.Length);

------解决方案--------------------
http://www.cnblogs.com/sleepywang/archive/2008/04/04/1137314.html
------解决方案--------------------
这里的className就是一个类的名字是一个字符串

System.Reflection.Assembly ass = System.Reflection.Assembly.Load(nameSpace); //nameSpace并不是名称空间,而是程序集名称
object obj = ass.CreateInstance(className);
Iobject op = (Iobject)obj;//Iobject为抽象类,是className的父类

------解决方案--------------------
貌似这不应该叫反射,而是动态编译的问题.
------解决方案--------------------
是什么样的字符串呢?如果是程序集全名称,那就更容易了
C# code

Type t = Type.GetType(assembleFullName);
object instance = Activator.CreateInstance(t);

------解决方案--------------------
http://blog.csdn.net/jinjazz/archive/2009/02/10/3872871.aspx
------解决方案--------------------
先做个记号··
------解决方案--------------------
????
------解决方案--------------------
在只知道字符串的情况下
如果是一个dll的完整路径。
先加载此dll然后
1获取所有的类型信息
2获取某个类型的构造函数列表
3使用某个构造函数的参数和列表类型信息
4使用该构造函数构造一个对象
------解决方案--------------------
学习一下。。
------解决方案--------------------
还是有些模糊
------解决方案--------------------
using System.Reflection 
新建对象: 
object obj = Type.GetType(类名+","+名称空间).InvokeMember(null, BindingFlags.CreateInstance |BindingFlags.Instance | BindingFlags.Public, null, null, null);
------解决方案--------------------
http://edu.itbulo.com/200608/104156.htm
这个可能参考一下
------解决方案--------------------
mark下