使用反射,我需要调查一个用户DLL并在其中创建一个类的对象。有什么简单的方法吗?
System.Reflection.Assembly
是你需要使用的类。它包含了许多用于迭代用户DLL中包含的类型的方法。您可以遍历每个类,也许查看它是否继承自特定的接口等。
http://msdn.microsoft.com/en-us/library/system.reflection.assembly_members.aspx
请调查Assembly.GetTypes()
方法以获取类型列表,或者使用Assembly.GetExportedTypes()
仅获取公共类型。
请查看以下链接:
http://www.java2s.com/Code/CSharp/Development-Class/Createanobjectusingreflection.htm
http://msdn.microsoft.com/en-us/library/k3a58006.aspx
你可以基本上使用反射来加载一个程序集,然后找到你感兴趣的类型。一旦你有了这个类型,你就可以查询它的构造方法或其他方法/属性。一旦你有了构造函数,你就可以调用它。非常简单!
正如已经提到的,您需要访问System.Reflection命名空间。
如果您事先知道要加载的DLL的位置/名称,则需要遍历Assembly.GetTypes()。
伪代码如下:
创建一个程序集对象。
遍历程序集中包含的所有类型。
一旦找到您要查找的类型,就调用它(CreateInstance)...
明智地使用它。
;)
如果您想查看Reflection代码,我有很多,但是这个任务非常简单,在野外至少有十几篇带有示例的文章。 (也就是Google)。尽管如此,MSDN是Reflection参考的好朋友。