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
Öppna ett nytt ActiveX DLL-projekt i Visual Basic 6.0. Ett projekt med namnet
Project1
skapas. Den har en klass med namnetClass1
.Högerklicka på Project1 i Projektutforskaren och klicka sedan på Project1-egenskaper. Dialogrutan Projektegenskaper visas.
På fliken Allmänt i dialogrutan Projektegenskaper ändrar du projektnamnet genom att
ComObject1
skriva i fältet Projektnamn .Högerklicka i Projektutforskaren
Class1
och klicka sedan på Egenskaper. Fönstret Egenskaper för klassen visas.Ändra egenskapen
Name
tillMathFunctions
.Högerklicka i Projektutforskaren
MathFunctions
och klicka sedan på Visa kod. Kodredigeraren visas.Lägg till en lokal variabel för att lagra egenskapsvärdet:
' Local variable to hold property value Private mvarProp1 As Integer
Lägg till egenskapsprocedurer för egenskap
Let
och egenskapGet
: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
Lägg till en funktion:
Function AddNumbers( ByVal SomeNumber As Integer, ByVal AnotherNumber As Integer) As Integer AddNumbers = SomeNumber + AnotherNumber End Function
Skapa och registrera COM-objektet genom att klicka på Skapa ComObject1.dll på Arkiv-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
Öppna ett nytt Visual Basic Windows-programprojekt.
Klicka på Lägg till referens på Projekt-menyn.
Dialogrutan Lägg till referens visas.
På fliken COM dubbelklickar du
ComObject1
i listan Komponentnamn och klickar på OK.På Projekt-menyn klickar du på Lägg till nytt objekt.
Dialogrutan Lägg till nytt objekt visas.
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 namnetMathClass
och dess kod visas.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
Ö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
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
Lägg till en knapp i startformuläret och dubbelklicka sedan på den för att visa koden.
I knappens
Click
händelsehanterarprocedur lägger du till följande kod för att skapa en instans avMathClass
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)
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.