ser*_*hio 1 vb.net events implementation interface .net-2.0
我在VB.NET v2工作
我有一个接口IMyInterface,这个接口实现了一个方法MyMethod.
我有一个对象MyObjectBase.该对象包含一个(相同)方法MyMethod.
1)如果现在我MyObject Inherits MyObjectBase Implements IMyInterface 需要我重新定义?(阴影,覆盖)MyMethod在MyObject课堂上?
2)如果相反,MyMethod我有一个MyEvent 事件的方法呢?
谢谢.
在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
Run Code Online (Sandbox Code Playgroud)
然后看看下面的代码及其输出:
Dim x As New TestClass()
x.Foo() ' Output: Foo '
Dim y As MyInterface = x
y.Foo() ' Output: Test '
Run Code Online (Sandbox Code Playgroud)
这样做的好处是,实现接口不会限制您根据需要命名功能.缺点是您必须使用Implements关键字将类方法与接口声明显式关联.
关于解释如此之多.现在让我来解决你的问题:由于你无法Button实现IVisibleChanged,你可以这样做:
Private Event MyVisibleChanged() Implements IVisibleChanged.VisibleChanged
Private Sub RethrowVisibleChanged() Handles MyBase.VisibleChanged
RaiseEvent MyVisibleChanged()
End Sub
Run Code Online (Sandbox Code Playgroud)
MyBase是一个引用超类的VB.NET关键字.同样,在这种情况下MyMethod,你可以做到
Private Sub MyInterfaceMethod() Implements IMyInterface.Method
MyBase.Method()
End Sub
Run Code Online (Sandbox Code Playgroud)
这似乎是不必要的额外工作,但在某种程度上,它是有道理的:Button.VisibleChanged并且IVisibleChanged.VisibleChanged可能是具有两个完全不同的语义的事件,它们碰巧具有相同的名称(毕竟Button 没有实现IVisibleChanged).使用您的代码,您可以明确地在这两者之间建立连接.
| 归档时间: |
|
| 查看次数: |
1044 次 |
| 最近记录: |