You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中结合接口使用DllImport特性?

关于C#接口与DllImport结合的问题

首先明确:你原本的接口写法是不可行的,原因有两点:

  1. C#接口中不能定义静态成员,internal static extern void Func();这种写法违反语法规则——接口成员默认是公共实例成员,不允许使用static修饰。
  2. 即使去掉static,接口也无法直接包含extern方法的声明,因为接口只定义契约,不包含具体实现(包括外部DLL的导入实现)。

要实现你想要的“统一调用不同DLL中同名方法”的效果,可以调整接口的设计,让接口定义实例方法,再让子类在实例方法中调用各自导入的静态外部方法。修改后的代码示例如下:

public interface IIntDll
{
    void Func();
}

public class TestDll1 : IIntDll
{
    [DllImport("Dll1.dll", CallingConvention = CallingConvention.StdCall)]
    private static extern void Func();

    public void Func()
    {
        Func(); // 调用导入的静态外部方法
    }
}

public class TestDll2 : IIntDll
{
    [DllImport("Dll2.dll", CallingConvention = CallingConvention.StdCall)]
    private static extern void Func();

    public void Func()
    {
        Func(); // 调用导入的静态外部方法
    }
}

public class Test
{
    public Test()
    {
        IIntDll intDll1 = new TestDll1();
        intDll1.Func();

        IIntDll intDll2 = new TestDll2();
        intDll2.Func();
    }
}

关于抽象类的方案

抽象类是可行的,你可以在抽象类中定义抽象实例方法,让子类实现并调用各自的DllImport方法;也可以在抽象类中定义静态的DllImport占位,但更合理的写法还是和接口方案类似,用抽象方法约束子类,子类实现时绑定对应的外部DLL:

public abstract class AbstractDll
{
    public abstract void Func();
}

public class TestDll1 : AbstractDll
{
    [DllImport("Dll1.dll", CallingConvention = CallingConvention.StdCall)]
    private static extern void Func();

    public override void Func()
    {
        Func();
    }
}

public class TestDll2 : AbstractDll
{
    [DllImport("Dll2.dll", CallingConvention = CallingConvention.StdCall)]
    private static extern void Func();

    public override void Func()
    {
        Func();
    }
}

// Test类的调用逻辑和之前一致
public class Test
{
    public Test()
    {
        AbstractDll dll1 = new TestDll1();
        dll1.Func();

        AbstractDll dll2 = new TestDll2();
        dll2.Func();
    }
}

总结:接口不能直接和DllImport结合定义静态外部方法,但可以通过“接口定义实例契约+子类实现时调用导入方法”的方式达成需求;抽象类同样可行,实现逻辑和接口方案类似,两者都能满足你统一调用不同DLL方法的目的。

内容的提问来源于stack exchange,提问作者defa0009

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 19:03:09