質問

VB.NET v2で作業しています

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

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

1) MyObject Inherits MyObjectBase Implements IMyInterface 再定義が必要ですか? (シャドウ、オーバーライド) MyMethod MyObject クラスに追加しますか?

2) MyMethod メソッドの代わりに MyEvent event がある場合はどうなりますか?

ありがとう。

役に立ちましたか?

解決

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つの間に明示的に接続を作成します。

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top