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