【问题标题】:VB.net interface won't compile, why?VB.net 界面无法编译,为什么?
【发布时间】:2010-03-04 08:18:36
【问题描述】:

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

我让它在 C# 中工作,它应该在 VB.net 中正常工作,唯一的问题是托管类无法编译,我收到此错误:
错误类“ManagedClass”必须为 ICalculator 接口实现“函数 Add(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

【问题讨论】:

  • 添加了实现 ICalculator.Add 和它的工作原理!

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


【解决方案1】:

在 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# 中,您必须创建至少一个“包装器”函数来调用另一个函数来实现这一点。

【讨论】:

  • 实现 ICalculator.Add。啊...谢谢!
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多