📜  c# 在运行时加载程序集 - C# (1)

📅  最后修改于: 2023-12-03 14:59:41.966000             🧑  作者: Mango

C# 在运行时加载程序集

在 .NET 中,程序集是代码、资源和元数据的逻辑单元。编写程序时,常常需要动态加载程序集,以便在运行时获得更大的灵活性。在 C# 中,可以使用 Assembly 类动态加载程序集。

加载程序集

使用 Assembly.Load 方法可以通过程序集的名称或路径来加载程序集。例如,以下代码可以加载默认应用程序域中的程序集:

Assembly assembly = Assembly.Load("MyAssembly");

这将返回一个 Assembly 对象,代表了名为 MyAssembly 的程序集。如果需要加载指定路径下的程序集,可以使用以下代码:

Assembly assembly = Assembly.LoadFile(@"C:\MyDirectory\MyAssembly.dll");

这将返回一个 Assembly 对象,代表了 C:\MyDirectory 目录下的 MyAssembly.dll 文件。

获取类型信息

在加载程序集之后,可以使用 Assembly 类提供的各种方法来获取类型信息。例如,以下代码可以获取 MyClass 类型的信息:

Type type = assembly.GetType("MyNamespace.MyClass");

这将返回一个 Type 对象,代表了 MyNamespace.MyClass 类型。如果需要获取程序集中的所有类型,可以使用以下代码:

Type[] types = assembly.GetTypes();

这将返回一个 Type 数组,其中包含了程序集中所有的公共类型。

调用方法

在获取类型信息之后,可以使用反射来调用类的方法。例如,以下代码可以创建 MyClass 类的实例并调用其 MyMethod 方法:

object instance = Activator.CreateInstance(type);
MethodInfo method = type.GetMethod("MyMethod");
method.Invoke(instance, null);

这将创建一个 MyClass 实例,然后调用其 MyMethod 方法。

总结

通过动态加载程序集,可以在运行时获得更大的灵活性。使用 Assembly 类可以方便地加载程序集,并通过反射来调用其中的方法。需要注意的是,动态加载程序集会带来额外的复杂性和开销,需要谨慎使用。