VB.net界面不会编译,为什么?

时间:2010-03-04 08:18:37

标签: c# vb.net interface com-interop

问题:我正在尝试将此转换为: http://support.microsoft.com/kb/828736 到VB.net

我让它在C#中工作,它应该在VB.net中没有问题,唯一的问题是托管类不会编译,我得到这个错误:
错误类“ManagedClass”必须实现“ICalculator-Interface 的函数添加(Number1 As Integer,Number2 As Integer)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 个答案:

答案 0 :(得分:5)

在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. Hanin和我自己提到的那样 - 它可以让你选择名字,但我们都没有提到你为什么要这样做。一个例子是,如果您实现两个定义相同方法名称的接口。并且您希望将这两种方法作为类的公共方法公开。在C#中,您必须创建至少一个“包装器”函数,该函数调用另一个函数来实现此目的。

答案 1 :(得分:2)

你只需要告诉它具有完全相同名称和定义的函数的类就是你想要处理接口函数的那个​​。

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