关于c#:在设计时不知道类名的情况下创建对象

关于c#:在设计时不知道类名的情况下创建对象

Creating an object without knowing the class name at design time

使用反射,我需要研究用户DLL并在其中创建类的对象。

简单的做法是什么?


尝试使用Activator.CreateInstance。


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是您反射参考的朋友。


看一下这些链接:

http://www.java2s.com/Code/CSharp/Development-Class/Createanobjectusingreflection.htm

http://msdn.microsoft.com/zh-CN/library/k3a58006.aspx

您基本上可以使用反射来加载程序集,然后找到您感兴趣的类型。一旦有了该类型,就可以要求找到它的构造函数或其他方法/属性。一旦有了构造函数,就可以调用它。简单!


您可以使用Activator.CreateInstance从Type对象创建类的实例,要获取dll中的所有类型,可以使用Assembly.GetTypes


推荐阅读