c# - 是否可以在程序集中创建所有类的实例?

标签 c# dll

我有一个应用程序,它创建并导出 .dll,其中包含 WPF 表单的自定义图标。

我正在尝试创建一种探索性测试,我可以在其中打开应用程序,然后选择 .dll。一旦我选择了.dll,它就会查看它的内部并创建其中每个类的实例,然后将这些对象添加到表单中。

我希望能够将此作为快速测试,以便在将 .dll 发送给客户之前查看该 .dll 中的所有图标是否正确显示。

我可以通过以下方式获取 .dll 内的所有类型:

var assembly = Assembly.LoadFrom(fileDialog.FileName);

foreach (var type in assembly.DefinedTypes)
{
   Console.WriteLine(type);
}

我想知道是否可以以某种方式使用它来创建对象。

最佳答案

简单的解决方案是使用 .NET Activator 类。它使用反射,但由于您想创建此对象用于测试目的,我认为开销不会对您产生影响。
您可以像这样使用激活器:

Type type = typeof(SomeClass);
object obj = Activator.CreateInstance(type);

如果您需要创建对象,其构造函数需要一些参数,您可以调用接受参数的重载 CreateInstance:

Type type = typeof(SomeClass);
object obj = Activator.CreateInstace(type, new object[] {"arg1", "arg2"});

CreateInstance 方法将返回对象,但您始终可以转换为所需的类型(如果您知道),以便您可以轻松地对新创建的对象执行一些操作。或者,您可以调用方法,使用反射设置属性。

您可以在 MSDN 上阅读有关 Activator 的更多信息。 .

关于c# - 是否可以在程序集中创建所有类的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30370291/

相关文章:

c# - .NET 中的 CoCreateInstance 完全匹配?

c++ - Dll 与静态库(MSVC9 运行时库选项)

c++ -/MT 选项(MSVCR100.dll 依赖项的静态链接)不适用于 Visual Studio

c# - Outlook 2007 加载项

c# - 具有相同输入的浮点错误

c# - 为 'Any CPU' 构建 p4api.net.dll

c# - 如何从c#调用一个dll文件

c++ - Visual Studio 吐出 .lib 而不是 .dll

c# 在 webbrowser.url 上使用 .ToString() 方法会自动转换 %26 符号?

c# - 在 C# 中应该如何使用匿名类型?