Exemplarische Vorgehensweise: Implementieren der Vererbung mit COM-Objekten (Visual Basic)
Visual Basic-Klassen können von Public-Klassen aus COM-Objekten abgeleitet werden, auch wenn diese mit früheren Versionen von Visual Basic erstellt wurden. Die von COM-Objekten geerbten Eigenschaften und Methoden können auf die gleiche Weise überschrieben oder überladen werden wie Eigenschaften und Methoden jeder anderen Basisklasse. Das Vererben von COM-Objekten bietet sich an, wenn Sie eine vorhandene Klassenbibliothek nicht erneut kompilieren möchten.
In der folgenden Prozedur wird veranschaulicht, wie Sie mit Visual Basic 6.0 ein COM-Objekt erstellen, das eine Klasse enthält, und wie Sie diese dann als Basisklasse verwenden.
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 Anpassen der Entwicklungseinstellungen in Visual Studio.
So erstellen Sie das in dieser exemplarischen Vorgehensweise verwendete COM-Objekt
Ö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 Namen Class1.
Klicken Sie im Projektexplorer mit der rechten Maustaste auf Project1, und klicken Sie dann auf Eigenschaften von Project1. Das Dialogfeld Projekteigenschaften wird angezeigt.
Ändern Sie im Dialogfeld Projekteigenschaften auf der Registerkarte Allgemein den Projektnamen, indem Sie im Feld Projektname den Namen ComObject1 eingeben.
Klicken Sie im Projektexplorer mit der rechten Maustaste auf Class1, und klicken Sie dann auf Eigenschaften. Das Eigenschaftenfenster wird für die Klasse angezeigt.
Ändern Sie die Name-Eigenschaft in MathFunctions.
Klicken Sie im Projektexplorer mit der rechten Maustaste auf MathFunctions, und klicken Sie dann 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 die Property Let-Eigenschaftenprozedur und die Property Get-Eigenschaftenprozedur 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
Sie können zwar auch eine mit Visual Basic erstellte Klasse als COM-Objekt verfügbar machen, allerdings handelt es sich dann nicht um ein echtes COM-Objekt. Ein solches Objekt kann in dieser exemplarischen Vorgehensweise nicht verwendet werden.Ausführliche Informationen finden Sie unter COM-Interoperabilität in .NET Framework-Anwendungen (Visual Basic).
Interop-Assemblys
In der folgenden Prozedur erstellen Sie eine Interop-Assembly, die als Brücke zwischen nicht verwaltetem Code (z. B. einem COM-Objekt) und dem verwalteten Code von Visual Studio fungiert. Die von Visual Basic erstellte Interop-Assembly deckt viele Details der Arbeit mit COM-Objekten ab, wie beispielsweise Interop-Marshalling, d. i. das Zusammenfassen von Parametern und Rückgabewerten in äquivalente Datentypen, wenn diese an COM-Objekte und von COM-Objekten übergeben werden. Der Verweis in der Visual Basic-Anwendung zeigt auf die Interop-Assembly, nicht auf das eigentliche 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.
Der Standarddateiname, Class1.vb, wird im Feld Name angezeigt. Ändern Sie den Eintrag in diesem Feld in MathClass.vb, und klicken Sie auf Hinzufügen. Dadurch wird eine Klasse mit dem Namen MathClass erstellt und ihr Code angezeigt.
Fügen Sie folgenden Code am Anfang von MathClass ein, damit die Klasse von der COM-Klasse erbt.
' 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 public-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, um die Klasse zu erweitern.
So testen Sie die geerbte Klasse
Fügen Sie dem Startformular eine Schaltfläche hinzu, und doppelklicken Sie anschließend darauf, um ihren Code anzuzeigen.
Fügen Sie der Ereignishandlerprozedur für das Click-Ereignis der Schaltfläche folgenden Code hinzu, um eine Instanz von MathClass 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)
Führen Sie das Projekt aus, indem Sie F5 drücken.
Wenn Sie auf die Schaltfläche im Formular klicken, wird zuerst die AddNumbers-Methode mit Zahlen vom Datentyp Short aufgerufen. Die entsprechende Methode der Basisklasse wird von Visual Basic ausgewählt. Der zweite Aufruf von AddNumbers wird an die überladene Methode von MathClass weitergeleitet. Der dritte Aufruf ruft die SubtractNumbers-Methode auf, die die Klasse erweitert. Die Eigenschaft der Basisklasse wird festgelegt, und der Wert wird angezeigt.
Nächste Schritte
Die überladene AddNumbers-Funktion scheint zum gleichen Datentyp zu gehören wie die von der Basisklasse des COM-Objekts geerbte Methode. Dies liegt daran, dass die Argumente und Parameter der Methode der Basisklasse in Visual Basic 6.0 als 16-Bit-Ganzzahlen definiert sind, jedoch in höheren Visual Basic-Versionen als 16-Bit-Ganzzahlen vom Typ Short verfügbar gemacht werden. Die neue Funktion übernimmt 32-Bit-Ganzzahlen und überlädt die Funktion der Basisklasse.
Überprüfen Sie daher bei COM-Objekten stets die Größe und den Datentyp von Parametern. Wenn Sie z. B. ein COM-Objekt verwenden, das ein Visual Basic 6.0-Auflistungsobjekt als Argument akzeptiert, können Sie keine Auflistung aus höheren Visual Basic-Versionen angeben.
Eigenschaften und Methoden, die von COM‑Klassen geerbt wurden, können überschrieben werden. Das heißt, Sie können eine lokale Eigenschaft oder Methode deklarieren, die eine aus einer Basis-COM‑Klasse geerbte Eigenschaft oder Methode ersetzt. Die Regeln für das Überschreiben von geerbten COM‑Eigenschaften ähneln denen für das Überschreiben anderer Eigenschaften und Methoden, wobei folgende Ausnahmen gelten:
Wenn Sie eine einzelne Eigenschaft oder Methode überschreiben, die von einer COM‑Klasse geerbt wurde, müssen Sie auch alle anderen geerbten Eigenschaften und Methoden überschreiben.
Eigenschaften, die ByRef-Parameter verwenden, können nicht überschrieben werden.
Siehe auch
Referenz
Weitere Ressourcen
COM-Interoperabilität in .NET Framework-Anwendungen (Visual Basic)