Welchen Unterschied ein oder zwei Jahre bringen können. Vor zweieinhalb Jahren dachte ich, ich würde ein Buch mit dem Titel Visual Basic 7 Unleashed für Sams schreiben. Das Abschließen der endgültigen Entwürfe von Sams Visual Basic .NET Unleashed erinnert mich daran, dass sich in Visual Basic viel geändert hat.
Um Ihnen zu helfen, den Übergang so gründlich und vollständig wie möglich zu gestalten, schreiben ich und andere Autoren und Mitwirkende viel über Threading, Reflektion, Assemblys, COM-Interop und Delegaten. Aber als ich kürzlich mit einem Freund Programmierthemen durchgesehen habe, wurde ich daran erinnert, dass es Entwickler auf allen Ebenen gibt, nicht nur auf der fortgeschrittenen Ebene. Um so gründlich wie möglich zu sein, erkunde ich fortgeschrittene Themen sowie nicht fortgeschrittene Themen. (Ich begrüße auch Anfragen von Lesern und schreibe manchmal einen Artikel, der auf mehreren Abfragen basiert.)
Dieser Artikel bringt es auf den Punkt. In diesem Artikel werden wir Schnittstellen untersuchen: wie man sie definiert und wie man sie implementiert.
Die Idee einer Schnittstelle ist für COM nicht neu, aber in Visual Basic 6 war jede Klasse eine COM-Schnittstelle. In Visual Basic .NET Jede Klasse ist eine Klasse und eine Schnittstelle ist eine Schnittstelle, aber keine COM-Schnittstelle. Klassen gibt es seit Jahrzehnten und Schnittstellen sind nicht der einzige Bereich von COM. Eine Klasse beschreibt die Felder, Eigenschaften, Ereignisse und Methoden, die ein Typ haben wird. Eine Schnittstelle ähnelt eher einem Portal oder einem Anhang. Eine Schnittstelle gibt an, dass ein Typ diese spezifischen Methoden implementiert, definiert jedoch nicht, was ein Typ ist. Zum Beispiel kann ein Haus ein Fenster haben, aber auch ein Auto. Ein Typ, der eine Methode implementiert open könnte als etwas definiert werden, das ein Fenster hat, aber die Typen könnten Autos, Boote, Häuser oder die Seele definieren.
Visual Basic 6 unterstützt keine Vererbung oder Klassen im objektorientierten Sinne des Konstrukts. VB6 unterstützt COM-Schnittstellen. VB .NET hingegen unterstützt Klassen und Schnittstellen, daher musste zwischen den beiden Idiomen unterschieden werden.
Definieren von Klassen und Schnittstellen in VB .NET
Die Klassen- und Schnittstellen-Idiome verwenden eine sehr ähnliche Syntax, wenn Sie sie definieren. Das folgende Beispiel definiert eine leere Klasse in VB .NET, gefolgt von einer leeren Schnittstelle.
Public Class AClassEnd ClassPublic Interface AnInterfaceEnd Interface
Klassen können Felder, Eigenschaften, Ereignisse und Methoden enthalten. Diese Elemente einer Klasse, Member genannt, können Modifikatoren haben, die angeben, dass sie öffentlich, privat, geschützt oder Freund sind. Alle Mitglieder einer Schnittstellendeklaration sind öffentlich und benötigen und können daher keine Zugriffsmodifikatoren haben.
Klassen enthalten Code; Schnittstellen nicht. Klassen, die eine Schnittstelle implementieren, enthalten jedoch Code. Beachten Sie, dass es in VB .NET keine Instanzen von Schnittstellen gibt. Jede Instanz ist ein Typ, der eine Schnittstelle implementiert, aber selbst keine Instanz der Schnittstelle ist. (Ab diesem Zeitpunkt werden wir die Diskussion über Klassen für ein anderes Mal verlassen und uns nur noch auf Schnittstellen konzentrieren.)
Implementieren von Schnittstellen
Angenommen, wir haben eine Schnittstelle namens AnInterface , können wir dieser Schnittstelle nur Methodendeklarationen hinzufügen. Wenn wir die Schnittstelle aus dem vorherigen Abschnitt erweitern, können wir eine Methode namens WhoAmI hinzufügen. Das Ergebnis wird als nächstes angezeigt.
Public Interface AnInterface Function WhoAmI() As StringEnd Interface
Alle Typen, die die AnInterface-Schnittstelle implementieren, müssen jede deklarierte Methode in dieser Schnittstelle implementieren. In diesem Beispiel müssen wir nur die Funktion WhoAmI implementieren. Angenommen, AClass implementiert AnInterface ; Wir müssten WhoAmI implementieren. Das Ergebnis der Implementierung von AnInterface in AClass würde den folgenden Code ergeben.
Public Class AClass Implements AnInterface Public Function WhoAmI() As String Implements AnInterface.WhoAmI Return "AClass" End FunctionEnd Class
Als erstes müssen wir angeben, dass wir die Schnittstelle namentlich implementieren möchten. Implements AnInterface teilt den Verbrauchern mit, dass AClass alle in AnInterface beschriebenen Methoden implementiert. (Die Visual Studio .NET IDE erinnert uns daran, dass wir dies auch tun müssen.)
Der Unterschied zwischen VB6 und VB .NET ist, dass wir die Implements Klausel zum Funktionskörper hinzufügen müssen, wie in der Auflistung gezeigt. Die Funktion wird als normal deklariert, aber die Klausel Implementiert AnInterface .WhoAmI schließt den Vertrag zwischen der Klasse und der Schnittstelle ab.
Abschließende Gedanken
Strukturen können Schnittstellen in VB.NET auch. Unabhängig davon, ob eine Klasse oder eine Struktur eine Schnittstelle implementiert, benötigen Sie die Implements-Anweisung wie gezeigt, und Sie müssen jede in der Schnittstelle definierte Methode mithilfe der Implements-Klausel am Ende des procedure-Headers implementieren, um anzugeben, dass eine bestimmte Methode eine bestimmte Schnittstellenmethode erfüllt.
Schnittstellen können sehr kurz oder sehr lang sein. Methoden, die von einer Schnittstelle beschrieben werden, können Unterprogramme oder Funktionen sein, und sie können so aufwendig oder einfach sein, wie Sie es benötigen. Eine Methode kann mehr als eine Schnittstellenmethode implementieren. Beachten Sie abschließend, dass Schnittstellenmethoden mit einem Verweis auf das Objekt oder mit einem Verweis auf die Schnittstelle aufgerufen werden können.
Über den Autor
Paul Kimmel ist freier Autor für Developer.com und CodeGuru.com . Suchen Sie nach coolen Visual Basic .Net-Themen in seinem kommenden Buch Visual Basic .Net Unleashed, das im Januar 2002 erhältlich ist.
Paul gründete Software Conceptions, Inc. im Jahr 1990. Wenden Sie sich an Paul Kimmel, um Hilfe zu erhalten. VB.NET anwendungen oder Migrieren von VB6-Anwendungen nach .NET.
# # #