C#动态加载DLL

动态加载DLL可以使程序部署更加灵活简单。C#的反射机制提供了动态加载DLL的方法。

动态加载DLL是为了调用同一接口、不同实现。在此我们先定义接口

 public interface DLLIneterface
    {
       int Calulate(int x, int y);
    }
然后对于这个计算,实现一个加法和一个减法。

加法的实现。编译的DLL名字为AddDLL.dll

namespace AddDLL
{
    public class Add : DLLIneterface
    {
        public int Calulate(int x, int y)
        {
            return x + y;
        }
    }
}

减法的实现,编译的DLL名字为MinusDLL

namespace MinusDLL
{
    public class Minus : DLLIneterface
    {
        public int Calulate(int x, int y)
        {
            return x - y;
        }
    }
}
之后在主程序中实现动态加载。在加载之前,要把相应的DLL放到Debug或Release目录下,或者加载时使用绝对路径。

主程序:

namespace DynamicLoadDLL
{
    class Program
    {
        static void Main(string[] args)
        {
            Assembly assembly = Assembly.Load("AddDLL");
            Type type = assembly.GetType("AddDLL.Add");
            MethodInfo DLLMethod = type.GetMethod("Calulate");
            object obj = Activator.CreateInstance(type);
            object[] paras = new object[2] { 5, 2 };//参数
            object result = DLLMethod.Invoke(obj, paras);
            Console.WriteLine(result);
        }
    }
}
其中Assembly要用到命名空间System.Reflection。

Assembly.Load为加载DLL程序集,不用加后缀名。
Type type = assembly.GetType("AddDLL.Add");为获取程序集中的类。我使用Add类来实现接口。AddDLL为命名空间。
MethodInfo DLLMethod = type.GetMethod("Calulate");获取要调用的方法。
object obj = Activator.CreateInstance(type);type为程序集中类的类型,这条语句是创建了类的实例。如果是调用static类型函数,则无需创建实例。在下面的<span style="font-family:Arial, Helvetica, sans-serif;">DLLMethod.Invoke(obj,paras)中的obj可以null代替。
Invoke(object obj, object[] paras)为调用方法。其中obj为类的实例。而paras为参数的集合。返回类型用object。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值