Dela via


Genomgång: Implementera arv med COM-objekt (Visual Basic)

Du kan härleda Visual Basic-klasser från Public klasser i COM-objekt, även de som skapats i tidigare versioner av Visual Basic. Egenskaperna och metoderna för klasser som ärvs från COM-objekt kan åsidosättas eller överbelastas på samma sätt som egenskaper och metoder för andra basklasser kan åsidosättas eller överbelastas. Arv från COM-objekt är användbart när du har ett befintligt klassbibliotek som du inte vill kompilera om.

Följande procedur visar hur du använder Visual Basic 6.0 för att skapa ett COM-objekt som innehåller en klass och sedan använda det som en basklass.

Kommentar

Datorn kan visa olika namn eller platser för vissa av Visual Studio-användargränssnittselementen i följande instruktioner. Den Visual Studio-utgåva som du har och de inställningar som du använder avgör dessa element. Mer information finns i Anpassa IDE.

Skapa COM-objektet som används i den här genomgången

  1. Öppna ett nytt ActiveX DLL-projekt i Visual Basic 6.0. Ett projekt med namnet Project1 skapas. Den har en klass med namnet Class1.

  2. Högerklicka på Project1 i Projektutforskaren och klicka sedan på Project1-egenskaper. Dialogrutan Projektegenskaper visas.

  3. På fliken Allmänt i dialogrutan Projektegenskaper ändrar du projektnamnet genom att ComObject1 skriva i fältet Projektnamn .

  4. Högerklicka i Projektutforskaren Class1och klicka sedan på Egenskaper. Fönstret Egenskaper för klassen visas.

  5. Ändra egenskapen Name till MathFunctions.

  6. Högerklicka i Projektutforskaren MathFunctionsoch klicka sedan på Visa kod. Kodredigeraren visas.

  7. Lägg till en lokal variabel för att lagra egenskapsvärdet:

    ' Local variable to hold property value
    Private mvarProp1 As Integer
    
  8. Lägg till egenskapsprocedurer för egenskap Let och egenskap Get :

    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. Lägg till en funktion:

    Function AddNumbers(
       ByVal SomeNumber As Integer,
       ByVal AnotherNumber As Integer) As Integer
    
       AddNumbers = SomeNumber + AnotherNumber
    End Function
    
  10. Skapa och registrera COM-objektet genom att klicka på Skapa ComObject1.dllArkiv-menyn .

    Kommentar

    Även om du också kan exponera en klass som skapats med Visual Basic som ett COM-objekt, är det inte ett sant COM-objekt och kan inte användas i den här genomgången. Mer information finns i COM-samverkan i .NET Framework-program.

Interop-sammansättningar

I följande procedur skapar du en interop-sammansättning som fungerar som en brygga mellan ohanterad kod (till exempel ett COM-objekt) och den hanterade kod som Visual Studio använder. Interop-sammansättningen som Visual Basic skapar hanterar många av detaljerna i arbetet med COM-objekt, till exempel interop marshalling, processen med paketeringsparametrar och returvärden i motsvarande datatyper när de flyttas till och från COM-objekt. Referensen i Visual Basic-programmet pekar på interop-sammansättningen, inte det faktiska COM-objektet.

Så här använder du ett COM-objekt med Visual Basic 2005 och senare versioner

  1. Öppna ett nytt Visual Basic Windows-programprojekt.

  2. Klicka på Lägg till referensProjekt-menyn.

    Dialogrutan Lägg till referens visas.

  3. På fliken COM dubbelklickar du ComObject1 i listan Komponentnamn och klickar på OK.

  4. På Projekt-menyn klickar du på Lägg till nytt objekt.

    Dialogrutan Lägg till nytt objekt visas.

  5. I fönstret Mallar klickar du på Klass.

    Standardfilnamnet, Class1.vb, visas i fältet Namn . Ändra det här fältet till MathClass.vb och klicka på Lägg till. Då skapas en klass med namnet MathClassoch dess kod visas.

  6. Lägg till följande kod överst MathClass i för att ärva från COM-klassen.

    ' 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. Överbelasta den offentliga metoden för basklassen genom att lägga till följande kod i MathClass:

    '  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. Utöka den ärvda klassen genom att lägga till följande kod i MathClass:

    '  The following function extends the inherited class.
    Function SubtractNumbers(
        ByVal SomeNumber As Integer,
        ByVal AnotherNumber As Integer) As Integer
    
        Return AnotherNumber - SomeNumber
    End Function
    

Den nya klassen ärver egenskaperna för basklassen i COM-objektet, överbelastar en metod och definierar en ny metod för att utöka klassen.

Testa den ärvda klassen

  1. Lägg till en knapp i startformuläret och dubbelklicka sedan på den för att visa koden.

  2. I knappens Click händelsehanterarprocedur lägger du till följande kod för att skapa en instans av MathClass och anropa de överlagrade metoderna:

    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. Kör projektet genom att trycka på F5.

När du klickar på knappen i formuläret AddNumbers anropas metoden först med Short datatypsnummer och Visual Basic väljer lämplig metod från basklassen. Det andra anropet till AddNumbers dirigeras till överlagringsmetoden från MathClass. Det tredje anropet SubtractNumbers anropar metoden, som utökar klassen. Egenskapen i basklassen anges och värdet visas.

Nästa steg

Du kanske har märkt att den överlagrade AddNumbers funktionen verkar ha samma datatyp som metoden som ärvts från basklassen för COM-objektet. Det beror på att argumenten och parametrarna för basklassmetoden definieras som 16-bitars heltal i Visual Basic 6.0, men de exponeras som 16-bitars heltal av typen Short i senare versioner av Visual Basic. Den nya funktionen accepterar 32-bitars heltal och överbelastar basklassfunktionen.

När du arbetar med COM-objekt kontrollerar du parametrarnas storlek och datatyper. När du till exempel använder ett COM-objekt som accepterar ett Visual Basic 6.0-samlingsobjekt som argument kan du inte ange en samling från en senare version av Visual Basic.

Egenskaper och metoder som ärvs från COM-klasser kan åsidosättas, vilket innebär att du kan deklarera en lokal egenskap eller metod som ersätter en egenskap eller metod som ärvts från en bas-COM-klass. Reglerna för att åsidosätta ärvda COM-egenskaper liknar reglerna för att åsidosätta andra egenskaper och metoder med följande undantag:

  • Om du åsidosätter en egenskap eller metod som ärvts från en COM-klass måste du åsidosätta alla andra ärvda egenskaper och metoder.

  • Egenskaper som använder ByRef parametrar kan inte åsidosättas.

Se även