在设计时不知道类名的情况下创建对象
使用反射,我需要研究用户DLL并在其中创建类的对象。
这样做的简单方法是什么?
解决方案
回答
尝试使用Activator.CreateInstance。
回答
我们可以使用Activator.CreateInstance从Type对象创建类的实例,要获取dll中的所有类型,可以使用Assembly.GetTypes
回答
看一下这些链接:
http://www.java2s.com/Code/CSharp/Development-Class/Createanobjectusingreflection.htm
http://msdn.microsoft.com/zh-CN/library/k3a58006.aspx
我们基本上可以使用反射来加载程序集,然后找到我们感兴趣的类型。一旦有了该类型,就可以要求找到它的构造函数或者其他方法/属性。一旦有了构造函数,就可以调用它。简单!
回答
System.Reflection.Assembly是我们要使用的类。它包含许多用于迭代用户DLL包含的类型的方法。我们可以遍历每个类,也许看看它是否继承自特定的接口等。
http://msdn.microsoft.com/zh-CN/library/system.reflection.assembly_members.aspx
研究" Assembly.GetTypes()"方法以获取类型列表,或者研究" Assembly.GetExportedTypes()"仅用于公共类型。
回答
如前所述,我们需要戳System.Reflection命名空间。
如果事先知道要加载的DLL的位置/名称,则需要遍历Assembly.GetTypes()。
在伪代码中,它看起来像这样:
创建和组装对象。
遍历程序集中包含的所有类型。
找到要查找的对象后,将其调用(CreateInstance)
明智地使用它。
;)
如果我们想看一看,我有很多反射代码,但是任务确实很简单,并且至少有十几篇文章带有示例。 (又名Google)。
尽管如此,MSDN是我们反射参考的朋友。