在设计时不知道类名创建对象

时间:2008-09-10 08:53:32

标签: c# reflection

使用反射,我需要调查用户DLL并在其中创建一个类的对象。

这样做的简单方法是什么?

5 个答案:

答案 0 :(得分:13)

答案 1 :(得分:3)

System.Reflection.Assembly是您要使用的课程。它包含许多用于迭代用户DLL包含的类型的方法。您可以遍历每个类,也许可以查看它是否继承自特定接口等。

http://msdn.microsoft.com/en-us/library/system.reflection.assembly_members.aspx

调查获取类型列表的Assembly.GetTypes()方法,或仅调查公共类型的Assembly.GetExportedTypes()

答案 2 :(得分:1)

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

答案 3 :(得分:1)

看一下这些链接:

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

http://msdn.microsoft.com/en-us/library/k3a58006.aspx

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

答案 4 :(得分:1)

正如已经说过的那样,你需要戳一下System.Reflection命名空间。

如果您事先知道要加载的DLL的位置/名称,则需要遍历Assembly.GetTypes()。

在Pseudocode中它看起来像这样:

创建和组装对象。

遍历程序集中包含的所有类型。

找到要查找的那个后,调用它(CreateInstance)......

明智地使用它。

如果你想环顾四周,我有很多反射代码,但任务非常简单,至少有十几篇文章在野外有样本。 (阿卡谷歌)。 尽管如此,MSDN是您参与Reflection Reference的朋友。