Frage

ich in VB.NET v2 arbeiten

Ich habe eine Schnittstelle IMyInterface und diese Schnittstelle implementiert ein Verfahren MyMethod .

Ich habe ein Objekt MyObjectBase . Dieses Objekt enthält eine (gleiche) Methode MyMethod .

1) Wenn ich jetzt MyObject Inherits MyObjectBase Implements IMyInterface muss ich neu zu definieren? (Schatten, gekröpft) MyMethod in der MyObject Klasse?

2) Was nun, wenn man statt der MyMethod Methode Ich habe eine MyEvent Ereignis

Danke.

War es hilfreich?

Lösung

In VB.NET, müssen Sie manuell verknüpfen Ihre Schnittstellenvertrag mit Implementierungen. Haben Sie einen Blick auf das folgende Beispiel:

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

Dann haben Sie einen Blick auf den folgenden Code und dessen Ausgang:

Dim x As New TestClass()
x.Foo()                           ' Output: Foo '
Dim y As MyInterface = x
y.Foo()                           ' Output: Test '

Dies hat den Vorteil, dass eine Schnittstelle implementiert nicht Sie bei der Benennung Ihrer Funktion beschränken, wie Sie mögen . Der Nachteil ist, dass man sich ausdrücklich Klassenmethoden mit Ihren Interface-Deklarationen mit dem Implements Schlüsselwort verknüpfen.


So viel über eine Erklärung. Nun lassen Sie mich zu Ihrem Problem erhalten: Da Sie nicht Button IVisibleChanged implementieren machen können, können Sie so etwas tun:

Private Event MyVisibleChanged() Implements IVisibleChanged.VisibleChanged

Private Sub RethrowVisibleChanged() Handles MyBase.VisibleChanged
    RaiseEvent MyVisibleChanged()
End Sub

MyBase ist ein VB.NET Keyword an die übergeordnete Klasse verweisen. Ebenso im Fall von MyMethod, können Sie

Private Sub MyInterfaceMethod() Implements IMyInterface.Method
    MyBase.Method()
End Sub

Das mag unnötig zusätzliche Arbeit erscheinen, aber in einer Art und Weise, es macht Sinn: Button.VisibleChanged und IVisibleChanged.VisibleChanged könnten Ereignisse mit zwei völlig unterschiedliche Semantik sein, der nur den gleichen Namen haben passieren (schließlich Button nicht implementieren IVisibleChanged). Mit Ihrem Code erstellen Sie explizit eine Verbindung zwischen diesen beiden.

Andere Tipps

Es ist, weil Sie Ihr Kind Klasse implementieren, die Sie neu definieren müssen. Ich glaube, wenn man nur aus dem Basisfall erben, die ohnehin durchgeführt wird, werden Sie nicht haben, wenn Sie es nicht brauchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top