在 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
)。使用您的代码,您可以显式地在这两者之间创建连接。