1

我在 VB.NET v2 中工作

我有一个接口IMyInterface,这个接口实现了一个方法MyMethod

我有一个对象MyObjectBase。该对象包含一个(相同的)方法MyMethod

1)如果现在我确实MyObject Inherits MyObjectBase Implements IMyInterface 需要重新定义?(阴影,覆盖)MyMethodMyObject课堂上?

2)如果MyMethod我有一个MyEvent 事件的方法,现在怎么办?

谢谢。

4

2 回答 2

6

在 VB.NET 中,您需要手动将接口契约与实现关联起来。看看下面的例子:

Interface MyInterface
    Sub Foo()
End Interface

Class TestClass
    Implements MyInterface

    Public Sub Test() Implements MyInterface.Foo
        Console.WriteLine("Test")
    End Sub

    Public Sub Foo()
        Console.WriteLine("Foo")
    End Sub
End Class

然后看看下面的代码及其输出:

Dim x As New TestClass()
x.Foo()                           ' Output: Foo '
Dim y As MyInterface = x
y.Foo()                           ' Output: Test '

这样做的好处是,实现接口不会限制您按自己的意愿命名函数。缺点是您必须使用Implements关键字将类方法与接口声明显式关联起来。


这么多的解释。现在让我解决您的问题:由于您无法Button实现 IVisibleChanged,因此您可以执行以下操作:

Private Event MyVisibleChanged() Implements IVisibleChanged.VisibleChanged

Private Sub RethrowVisibleChanged() Handles MyBase.VisibleChanged
    RaiseEvent MyVisibleChanged()
End Sub

MyBase是一个引用超类的 VB.NET 关键字。同样,在 的情况下MyMethod,您可以执行

Private Sub MyInterfaceMethod() Implements IMyInterface.Method
    MyBase.Method()
End Sub

这似乎是不必要的额外工作,但在某种程度上,它是有道理的:Button.VisibleChanged并且IVisibleChanged.VisibleChanged可能是具有两种完全不同语义的事件,它们恰好具有相同的名称(毕竟Button 没有实现IVisibleChanged)。使用您的代码,您可以显式地在这两者之间创建连接。

于 2009-11-26T15:48:54.890 回答
0

这是因为你实现了你的子类,你必须重新定义它。我相信,如果您只是从基本案例(无论如何都已实现)继承,那么如果您不需要它,您就不必这样做。

于 2009-11-26T14:51:56.667 回答