代码之家  ›  专栏  ›  技术社区  ›  gil

在设计时不知道类名的情况下创建对象

  •  5
  • gil  · 技术社区  · 16 年前

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

    最简单的方法是什么?

    5 回复  |  直到 10 年前
        1
  •  12
  •   jfs    16 年前
        2
  •  3
  •   samjudson    16 年前

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

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

    调查 Assembly.GetTypes() 获取类型列表的方法,或 Assembly.GetExportedTypes() 只对公众开放。

        3
  •  1
  •   Nir    16 年前

    可以使用Activator.CreateInstance从类型对象创建类的实例,若要获取dll中的所有类型,可以使用assembly.get types

        4
  •  1
  •   Mark Ingram    16 年前

    看看这些链接:

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

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

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

        5
  •  1
  •   Martin Marconcini    16 年前

    正如前面所说,您需要插入System.Reflection命名空间。

    如果预先知道要加载的dll的位置/名称,则需要遍历assembly.gettypes()。

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

    创建和组装对象。

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

    找到要查找的对象后,调用它(CreateInstance)

    明智地使用它。

    ;)

    如果你想四处看看的话,我有很多反射代码,但是这个任务非常简单,而且至少有十几篇文章都有样本。(又名谷歌)。 尽管如此,msdn还是您的朋友,供您参考。