我在VB.NET v2工作

我有一个界面 IMyInterface ,这个界面实现了一个方法 MyMethod

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

1)如果现在我做 MyObject Inherits MyObjectBase Implements IMyInterface 需要我重新定义吗? (shadow,override) 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

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

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top