【问题标题】:Creating an object without knowing the class name at design time在设计时不知道类名的情况下创建对象
【发布时间】:2015-06-17 17:49:05
【问题描述】:

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

简单的方法是什么?

【问题讨论】:

    标签: c# reflection


    【解决方案1】:

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          看看这些链接:

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

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

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

          【讨论】:

            【解决方案5】:

            正如已经说过的,您需要戳 System.Reflection 命名空间。

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

            在伪代码中它看起来像这样:

            创建和组装对象。

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

            一旦你找到你要找的,调用它(CreateInstance)…

            明智地使用它。

            ;)

            如果你想四处看看,我有很多反射代码,但任务真的很简单,至少有十多篇关于示例的文章。 (又名谷歌)。 尽管如此,MSDN 是反射参考的朋友。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-11-28
              • 1970-01-01
              • 2019-06-13
              • 2011-03-15
              相关资源
              最近更新 更多