Exemplarische Vorgehensweise: Implementieren der Vererbung mit COM-Objekten (Visual Basic)
Sie können Visual Basic-Klassen von Public
-Klassen in COM-Objekten ableiten. Das funktioniert sogar für Klassen, die in früheren Versionen von Visual Basic erstellt wurden. Die von COM-Objekten geerbten Eigenschaften und Methoden von Klassen können genau wie Eigenschaften und Methoden anderer Basisklassen außer Kraft gesetzt oder überladen werden. Die Vererbung von COM-Objekten ist nützlich, wenn Sie über eine bereits vorhandene Klassenbibliothek verfügen, die Sie nicht erneut kompilieren möchten.
In der folgenden Prozedur wird gezeigt, wie mithilfe von Visual Basic 6.0 ein COM-Objekt mit einer Klasse erstellt und diese Klasse dann als Basisklasse verwendet wird.
Hinweis
Auf Ihrem Computer werden möglicherweise andere Namen oder Speicherorte für die Benutzeroberflächenelemente von Visual Studio angezeigt als die in den folgenden Anweisungen aufgeführten. Diese Elemente sind von der jeweiligen Visual Studio-Version und den verwendeten Einstellungen abhängig. Weitere Informationen finden Sie unter Personalisieren der IDE.
So erstellen Sie das COM-Objekt, das in dieser exemplarischen Vorgehensweise verwendet wird
Öffnen Sie in Visual Basic 6.0 ein neues ActiveX-DLL-Projekt. Ein Projekt mit dem Namen
Project1
wird erstellt. Es verfügt über eine Klasse mit dem NamenClass1
.Klicken Sie im Projektexplorer mit der rechten Maustaste auf Project1, und klicken Sie anschließend auf Eigenschaften von Project1. Das Dialogfeld Projekteigenschaften wird angezeigt.
Ändern Sie auf der Registerkarte Allgemein des Dialogfelds Projekteigenschaften den Projektnamen, indem Sie
ComObject1
in das Feld Projektname eingeben.Klicken Sie im Projektexplorer mit der rechten Maustaste auf
Class1
, und klicken Sie anschließend auf Eigenschaften. Das Fenster Eigenschaften wird für die Klasse angezeigt.Ändern Sie die
Name
Eigenschaft inMathFunctions
.Klicken Sie im Projektexplorer mit der rechten Maustaste auf
MathFunctions
, und klicken Sie anschließend auf Code anzeigen. Der Code-Editor wird angezeigt.Fügen Sie eine lokale Variable für den Eigenschaftswert hinzu:
' Local variable to hold property value Private mvarProp1 As Integer
Fügen Sie Eigenschaftenprozeduren für die Eigenschaften
Let
undGet
hinzu:Public Property Let Prop1(ByVal vData As Integer) 'Used when assigning a value to the property. mvarProp1 = vData End Property Public Property Get Prop1() As Integer 'Used when retrieving a property's value. Prop1 = mvarProp1 End Property
Fügen Sie eine Funktion hinzu:
Function AddNumbers( ByVal SomeNumber As Integer, ByVal AnotherNumber As Integer) As Integer AddNumbers = SomeNumber + AnotherNumber End Function
Erstellen und registrieren Sie das COM-Objekt, indem Sie im Menü Datei auf ComObject1.dll erstellen klicken.
Hinweis
Eine mit Visual Basic erstellte Klasse kann zwar auch als COM-Objekt verfügbar gemacht werden, ist aber kein echtes COM-Objekt und kann in dieser exemplarischen Vorgehensweise nicht verwendet werden. Ausführliche Informationen finden Sie unter COM-Interoperabilität in .NET Framework-Anwendungen.
Interopassemblys
Im folgenden Verfahren wird eine Interopassembly erstellt, die als Brücke zwischen nicht verwaltetem Code (z. B. einem COM-Objekt) und dem verwalteten Code fungiert, der von Visual Studio verwendet wird. Die von Visual Basic erstellte Interopassembly kümmert sich um viele Details im Zusammenhang mit der Verwendung von COM-Objekten – beispielsweise um das Interop-Marshalling. Bei diesem Prozess werden Parameter und Rückgabewerte in entsprechende Datentypen verpackt, wenn sie an COM-Objekte bzw. von COM-Objekten übermittelt werden. In der Visual Basic-Anwendung wird auf die Interopassembly verwiesen, nicht auf das tatsächliche COM-Objekt.
So verwenden Sie ein COM-Objekt mit Visual Basic 2005 und höheren Versionen
Öffnen Sie ein neues Visual Basic-Windows-Anwendungsprojekt.
Klicken Sie im Menü Projekt auf Verweis hinzufügen.
Das Dialogfeld Verweis hinzufügen wird angezeigt.
Doppelklicken Sie auf der Registerkarte COM in der Liste Komponentenname auf
ComObject1
, und klicken Sie auf OK.Klicken Sie im Menü Projekt auf Neues Element hinzufügen.
Das Dialogfeld Neues Element hinzufügen wird angezeigt.
Klicken Sie im Bereich Vorlagen auf Klasse.
Im Feld Name wird der Standarddateiname (
Class1.vb
) angezeigt. Ändern Sie dieses Feld in „MathClass.vb“, und klicken Sie auf Hinzufügen. Dadurch wird eine Klasse mit dem NamenMathClass
erstellt und ihr Code angezeigt.Fügen Sie am Anfang von
MathClass
den folgenden Code hinzu, um von der COM-Klasse zu erben:' The inherited class is called MathFunctions in the base class, ' but the interop assembly appends the word Class to the name. Inherits ComObject1.MathFunctionsClass
Überladen Sie die öffentliche Methode der Basisklasse, indem Sie
MathClass
den folgenden Code hinzufügen:' This method overloads the method AddNumbers from the base class. Overloads Function AddNumbers( ByVal SomeNumber As Integer, ByVal AnotherNumber As Integer) As Integer Return SomeNumber + AnotherNumber End Function
Erweitern Sie die geerbte Klasse, indem Sie
MathClass
den folgenden Code hinzufügen:' The following function extends the inherited class. Function SubtractNumbers( ByVal SomeNumber As Integer, ByVal AnotherNumber As Integer) As Integer Return AnotherNumber - SomeNumber End Function
Die neue Klasse erbt die Eigenschaften der Basisklasse im COM-Objekt, überlädt eine Methode und definiert eine neue Methode zum Erweitern der Klasse.
So testen Sie die geerbte Klasse
Fügen Sie Ihrem Startformular eine Schaltfläche hinzu, und doppelklicken Sie dann darauf, um den Code anzuzeigen.
Fügen Sie in der
Click
-Ereignishandlerprozedur der Schaltfläche den folgenden Code hinzu, um eine Instanz vonMathClass
zu erstellen und die überladenen Methoden aufzurufen:Dim Result1 As Short Dim Result2 As Integer Dim Result3 As Integer Dim MathObject As New MathClass Result1 = MathObject.AddNumbers(4S, 2S) ' Add two Shorts. Result2 = MathObject.AddNumbers(4, 2) 'Add two Integers. Result3 = MathObject.SubtractNumbers(2, 4) ' Subtract 2 from 4. MathObject.Prop1 = 6 ' Set an inherited property. MsgBox("Calling the AddNumbers method in the base class " & "using Short type numbers 4 and 2 = " & Result1) MsgBox("Calling the overloaded AddNumbers method using " & "Integer type numbers 4 and 2 = " & Result2) MsgBox("Calling the SubtractNumbers method " & "subtracting 2 from 4 = " & Result3) MsgBox("The value of the inherited property is " & MathObject.Prop1)
Drücken Sie F5, um das Projekt auszuführen.
Wenn Sie im Formular auf die Schaltfläche klicken, wird zunächst die Methode AddNumbers
mit Zahlen des Datentyps Short
aufgerufen, und Visual Basic wählt die entsprechende Methode aus der Basisklasse aus. Der zweite Aufruf von AddNumbers
wird an die Überladungsmethode aus MathClass
weitergeleitet. Mit dem dritten Aufruf wird die Methode SubtractNumbers
aufgerufen, die die Klasse erweitert. Die Eigenschaft in der Basisklasse wird festgelegt, und der Wert wird angezeigt.
Nächste Schritte
Wahrscheinlich ist Ihnen bereits aufgefallen, dass die überladene Funktion AddNumbers
offenbar den gleichen Datentyp hat wie die Methode, die von der Basisklasse des COM-Objekts geerbt wurde. Das liegt daran, dass die Argumente und Parameter der Basisklassenmethode in Visual Basic 6.0 als 16-Bit-Ganzzahlen definiert sind, in späteren Versionen von Visual Basic jedoch als 16-Bit-Ganzzahlen vom Typ Short
verfügbar gemacht werden. Die neue Funktion akzeptiert 32-Bit-Ganzzahlen und überlädt die Basisklassenfunktion.
Überprüfen Sie bei der Verwendung von COM-Objekten die Größe und die Datentypen von Parametern. Wenn Sie beispielsweise ein COM-Objekt verwenden, das ein Visual Basic 6.0-Auflistungsobjekt als Argument akzeptiert, können Sie keine Auflistung aus einer höheren Version von Visual Basic bereitstellen.
Von COM-Klassen geerbte Eigenschaften und Methoden können außer Kraft gesetzt werden. Sie können also eine lokale Eigenschaft oder Methode deklarieren, die eine von einer COM-Basisklasse geerbte Eigenschaft oder Methode ersetzt. Die Regeln für die Außerkraftsetzung geerbter COM-Eigenschaften ähneln den Regeln für die Außerkraftsetzung anderer Eigenschaften und Methoden. Es gelten allerdings folgende Ausnahmen:
Wenn Sie eine Eigenschaft oder Methode außer Kraft setzen, die von einer COM-Klasse geerbt wurde, müssen Sie auch alle anderen geerbten Eigenschaften und Methoden außer Kraft setzen.
Eigenschaften, die Parameter vom Typ
ByRef
verwenden, können nicht außer Kraft gesetzt werden.