首页 >后端开发 >C++ >如何从程序集和类型名称动态实例化类?

如何从程序集和类型名称动态实例化类?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-19 09:07:13283浏览

How Can I Instantiate a Class Dynamically from its Assembly and Type Name?

运行时动态创建类实例

仅知道DLL名称和类名,无需在项目中添加程序集引用,即可在运行时创建对象实例。此功能特别适用于插件系统或依赖注入等场景。

使用 Assembly.LoadFrom()

要将程序集加载到内存中,请使用 Assembly.LoadFrom() 方法,并提供 DLL 文件的路径:

<code class="language-csharp">Assembly assembly = Assembly.LoadFrom("library.dll");</code>

查找 Type 对象

加载程序集后,使用反射来定位特定类型:

<code class="language-csharp">Type type = assembly.GetType("Company.Project.Classname");</code>

创建实例

最后,使用 Activator.CreateInstance() 创建该类型的对象实例:

<code class="language-csharp">object instanceOfMyType = Activator.CreateInstance(type);</code>

处理未知 DLL 位置

如果您没有 DLL 的绝对路径,则可以依赖 .NET 类型解析机制:

<code class="language-csharp">object instanceOfMyType = Activator.CreateInstance("library.dll", "Company.Project.Classname");</code>

此方法将自动搜索各种位置,包括应用程序根目录、system32 和 GAC,以查找程序集并解析类型。

高级定制

如有必要,您可以通过实现自定义的 DLL 搜索机制来增强此解决方案,以便搜索特定目录中的 DLL。这在您存储默认类型解析机制未搜索的其他程序集的场景中,将提供更大的灵活性。

以上是如何从程序集和类型名称动态实例化类?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn