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

如何让类库引用另一仅包含接口的类库并正确实现其定义的接口

问题解决方法

报错根因

你遇到的Type Imaths is not defined报错由两个问题共同导致:

  1. IMaths是InterfaceHolder类的嵌套类型,你引用时没有带上外层类的路径
  2. InterfaceHolder类和内部的IMaths接口都没有加Public修饰符,VB.NET中顶层类型默认访问修饰符为Friend,仅允许同一程序集内访问,跨项目引用时无法识别。

正确创建包含接口的类库

不需要把接口嵌套在类内部,直接在类库的根命名空间下定义公共接口即可,修改MyInterface项目的代码如下:

' MyInterface项目下的代码,无需嵌套类
Public Interface IMaths
    Function ADD(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface

如果确实需要嵌套在InterfaceHolder类中,必须同时给外层类和接口添加Public修饰符:

Public Class InterfaceHolder
    Public Interface IMaths
        Function ADD(ByVal a As Integer, ByVal b As Integer) As Integer
    End Interface
End Class

修改完成后重新生成MyInterface项目,确保被引用的是最新生成的dll文件。

跨项目实现接口的方法

接口本身就是类型定义,不需要创建任何对象即可直接实现:

  • 如果是直接在命名空间下定义的IMaths,直接用原有写法即可:
' MyMathsLibrary项目代码
Imports MyInterface ' 顶部加这行可以省略命名空间前缀

Public Class MathOperations 
    Implements IMaths  ' 加了Imports后可以直接写接口名,否则写MyInterface.IMaths

    Public Function ADD(a As Integer, b As Integer) As Integer Implements IMaths.ADD
        Return a + b
    End Function
End Class
  • 如果是嵌套在InterfaceHolder类中的接口,引用时需要带上外层类路径:
Implements MyInterface.InterfaceHolder.IMaths

接口不能声明为Shared的处理方案

接口本身的设计定位是实例行为的契约,天生不支持Shared修饰符,如果你需要调用方无需实例化实现类即可调用方法,可以在实现类中同时提供静态访问入口:

Public Class MathOperations 
    Implements MyInterface.IMaths  

    ' 实现接口约定的实例方法
    Public Function ADD(a As Integer, b As Integer) As Integer Implements MyInterface.IMaths.ADD
        Return a + b
    End Function

    ' 额外提供静态方法,无需实例化即可调用
    Public Shared Function ADD(a As Integer, b As Integer) As Integer
        Return a + b
    End Function
End Class

调用时直接用MathOperations.ADD(1,2)即可,不需要创建MathOperations的实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:36:04