1

私はVB.NETv2で働いています

私はインターフェースIMyInterfaceを持っており、このインターフェースはメソッドMyMethodを実装しています。

オブジェクトMyObjectBaseがあります。このオブジェクトには、(同じ)メソッドMyMethodが含まれています。

1)今ならMyObject Inherits MyObjectBase Implements IMyInterface 、再定義する必要がありますか?(シャドウ、オーバーライド)クラスMyMethodで?MyObject

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、2つの完全に異なるセマンティクスを持つイベントであり、たまたま同じ名前を持っている可能性があります(結局は実装されButton ませんIVisibleChanged)。コードを使用して、これら2つの間に明示的に接続を作成します。

于 2009-11-26T15:48:54.890 に答える
0

子クラスを実装するため、再定義する必要があります。とにかく実装されているベースケースから継承するだけであれば、必要がなければ継承する必要はないと思います。

于 2009-11-26T14:51:56.667 に答える