C#动态加载DLL与调用成员方法:接口与非接口实现

5星 · 超过95%的资源 需积分: 48 19 下载量 93 浏览量 更新于2024-09-10 收藏 204KB PDF 举报
"这篇教程介绍了如何在C#中动态加载DLL并调用其成员方法,提供了两种不同的方法:非接口调用和接口调用。这两种方法都是为了在运行时加载和使用外部DLL库,而无需在编译时就依赖这些库。" 在C#中,动态加载DLL可以增加程序的灵活性,允许在程序运行时决定加载哪些模块。下面将详细解释这两种方法: 1. **非接口调用** 非接口调用是通过直接获取DLL中类的方法信息并调用`Invoke`来实现的。这种方法适用于DLL中的类不提供接口的情况。以下步骤展示了如何进行非接口调用: a. 加载DLL:使用`Assembly.LoadFrom`方法加载指定路径的DLL文件。 b. 获取类型:通过`Assembly.GetType`方法获取DLL中特定类的类型信息。 c. 创建对象:使用`Activator.CreateInstance`创建该类型的实例。 d. 获取方法:通过`Type.GetMethod`获取类中指定方法的信息。 e. 调用方法:通过`MethodInfo.Invoke`方法调用目标方法,传入参数。 在示例代码中,`TestDll.dll`包含一个名为`TestA`的类,该类有一个`Max`方法。在按钮点击事件中,程序加载了DLL,创建了`TestA`的实例,并调用了`Max`方法,将结果显示在文本框中。 2. **接口调用** 接口调用则是在DLL中定义一个接口,让DLL的类实现这个接口。这样,调用方可以通过接口调用DLL的方法,提高了代码的可维护性和可扩展性。以下是接口调用的步骤: a. 定义接口:在独立的命名空间中定义接口,如`ITestInterface`中的`ItestF`接口,包含待调用的方法。 b. 实现接口:在DLL中,让类实现这个接口,如`TestDll`中的`TestB`类。 c. 加载DLL和获取类型:与非接口调用相同。 d. 创建对象:创建实现接口的类的实例。 e. 调用方法:通过接口实例调用相应的方法。 在接口调用的例子中,`TestB`类实现了`ItestF`接口,包含了`Max`和`Min`方法。在按钮点击事件中,程序通过接口调用了这两个方法,同样将结果展示在文本框中。 总结来说,C#中的动态加载DLL提供了灵活的代码组织和运行时的模块化能力。非接口调用适合简单场景,而接口调用则提供了更好的设计模式,使得代码更易于测试和扩展。这两种方法都可以帮助开发者在不修改主程序的情况下,更新或扩展DLL的功能。