代码之家  ›  专栏  ›  技术社区  ›  Stefan Steiger

VB.NET接口无法编译,为什么?

  •  1
  • Stefan Steiger  · 技术社区  · 14 年前

    问题:我正在尝试在这里转换: http://support.microsoft.com/kb/828736 到VB.NET

    我让它在C中工作,它在vb.net中应该可以毫无问题地工作,唯一的问题是托管类无法编译,我得到这个错误:
    错误类“managedclass”必须为icalculator接口实现“function add(number1 as integer,number2 as integer)”。

    为什么?我看到一个函数声明了,一个实现了,并且使用相同的参数…怎么了?

     Imports System
     Imports System.Collections.Generic
     Imports System.Text
    
    Namespace TestLibrary2
    ' Interface declaration.
    Public Interface ICalculator
        Function Add(ByVal Number1 As Integer, ByVal Number2 As Integer) As Integer
    End Interface
    
    
    
    ' Interface implementation.
    Public Class ManagedClass
        Implements ICalculator
        Public Function Add(ByVal Number1 As Integer, ByVal Number2 As Integer) As Integer
            Return Number1 + Number2
        End Function
    End Class
    
    
    End Namespace
    
    2 回复  |  直到 14 年前
        1
  •  5
  •   Damien_The_Unbeliever    14 年前

    在vb.net中,你必须明确你的接口实现——这比c更具灵活性(因为你可以随意命名你的函数),但是工作要多一些。

    Public Function Add(ByVal Number1 As Integer, ByVal Number2 As Integer) As Integer Implements ICalculator.Add
        Return Number1 + Number2
    End Function
    

    正如我和M.A.哈宁都提到过的——它让你选择名字,但我们都没有提到你为什么要这样做。一个例子是,如果您正在实现两个定义相同方法名的接口。您希望将这两个方法都公开为类上的公共方法。在C中,您必须创建至少一个“包装器”函数来调用另一个函数来实现这一点。

        2
  •  2
  •   rerun    14 年前

    您只需要告诉它,具有完全相同名称和定义的函数的类实际上是您想要处理接口函数的。

      Public Function Add(ByVal Number1 As Integer, ByVal Number2 As Integer) As Integer Implements ICalculator.Add
            Return Number1 + Number2
        End Function