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

  1. Ö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.

  2. Klicken Sie im Projektexplorer mit der rechten Maustaste auf Project1, und klicken Sie anschließend auf Eigenschaften von Project1. Das Dialogfeld Projekteigenschaften wird angezeigt.

  3. Ändern Sie auf der Registerkarte Allgemein des Dialogfelds Projekteigenschaften den Projektnamen, indem Sie ComObject1 in das Feld Projektname eingeben.

  4. 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.

  5. Ändern Sie die Name Eigenschaft in MathFunctions.

  6. Klicken Sie im Projektexplorer mit der rechten Maustaste auf MathFunctions, und klicken Sie anschließend auf Code anzeigen. Der Code-Editor wird angezeigt.

  7. Fügen Sie eine lokale Variable für den Eigenschaftswert hinzu:

    ' Local variable to hold property value
    Private mvarProp1 As Integer
    
  8. Fügen Sie Eigenschaftenprozeduren für die Eigenschaften Let und Get 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
    
  9. Fügen Sie eine Funktion hinzu:

    Function AddNumbers(
       ByVal SomeNumber As Integer,
       ByVal AnotherNumber As Integer) As Integer
    
       AddNumbers = SomeNumber + AnotherNumber
    End Function
    
  10. 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

  1. Öffnen Sie ein neues Visual Basic-Windows-Anwendungsprojekt.

  2. Klicken Sie im Menü Projekt auf Verweis hinzufügen.

    Das Dialogfeld Verweis hinzufügen wird angezeigt.

  3. Doppelklicken Sie auf der Registerkarte COM in der Liste Komponentenname auf ComObject1, und klicken Sie auf OK.

  4. Klicken Sie im Menü Projekt auf Neues Element hinzufügen.

    Das Dialogfeld Neues Element hinzufügen wird angezeigt.

  5. 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 Namen MathClass erstellt und ihr Code angezeigt.

  6. 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
    
  7. Ü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
    
  8. 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

  1. Fügen Sie Ihrem Startformular eine Schaltfläche hinzu, und doppelklicken Sie dann darauf, um den Code anzuzeigen.

  2. Fügen Sie in der Click-Ereignishandlerprozedur der Schaltfläche den 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)
    
  3. 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.

Weitere Informationen