Megosztás a következőn keresztül:


Útmutató: Öröklés megvalósítása COM-objektumokkal (Visual Basic)

A Visual Basic-osztályokat COM-objektumok osztályaiból Public is származtathatja, még a Visual Basic korábbi verzióiban létrehozott osztályokból is. A COM-objektumoktól örökölt osztályok tulajdonságai és metódusai felülbírálhatók vagy túlterhelhetők, ahogyan bármely más alaposztály tulajdonságai és metódusai felülbírálhatók vagy túlterhelhetők. A COM-objektumok öröklése akkor hasznos, ha olyan meglévő osztálykönyvtára van, amelyet nem szeretne újrafordíteni.

Az alábbi eljárás bemutatja, hogyan hozhat létre egy osztályt tartalmazó COM-objektumot a Visual Basic 6.0 használatával, majd hogyan használhatja alaposztályként.

Feljegyzés

Előfordulhat, hogy a számítógép különböző neveket vagy helyeket jelenít meg a Visual Studio felhasználói felületének egyes elemeihez az alábbi utasításokban. Ezeket az elemeket a Visual Studio-kiadás és a használt beállítások határozzák meg. További információ: Az IDE személyre szabása.

Az útmutatóban használt COM-objektum létrehozása

  1. A Visual Basic 6.0-ban nyisson meg egy új ActiveX DLL-projektet. Létrejön egy nevesített Project1 projekt. Van egy osztály neve Class1.

  2. A Project Explorerben kattintson a jobb gombbal a Project1, majd a Project1 Tulajdonságok parancsra. Megjelenik a Projekt tulajdonságai párbeszédpanel.

  3. A Projekt tulajdonságai párbeszédpanel Általános lapján módosítsa a projekt nevét a Projektnév mező beírásávalComObject1.

  4. A Project Explorerben kattintson a jobb gombbal, majd kattintson a Tulajdonságok parancsra.Class1 Megjelenik az osztály Tulajdonságok ablaka.

  5. Módosítsa a tulajdonságot a Name következőre MathFunctions: .

  6. A Project Explorerben kattintson MathFunctionsa jobb gombbal, majd kattintson a Kód megtekintése parancsra. Megjelenik a Kódszerkesztő .

  7. Adjon hozzá egy helyi változót a tulajdonság értékének tárolásához:

    ' Local variable to hold property value
    Private mvarProp1 As Integer
    
  8. Tulajdonság- Let és tulajdonságtulajdonság-eljárások Get hozzáadása:

    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üggvény hozzáadása:

    Function AddNumbers(
       ByVal SomeNumber As Integer,
       ByVal AnotherNumber As Integer) As Integer
    
       AddNumbers = SomeNumber + AnotherNumber
    End Function
    
  10. Hozza létre és regisztrálja a COM-objektumot a Fájl menü Make ComObject1.dll (Make ComObject1.dll) parancsára kattintva.

    Feljegyzés

    Bár a Visual Basic használatával létrehozott osztályt COM-objektumként is elérhetővé teheti, ez nem valódi COM-objektum, és ebben az útmutatóban nem használható. További részletekért lásd: COM-együttműködés .NET-keretrendszer alkalmazásokban.

Interop szerelvények

Az alábbi eljárás során létrehoz egy interop szerelvényt, amely hidat képez a nem felügyelt kód (például egy COM-objektum) és a Visual Studio által használt felügyelt kód között. A Visual Basic által létrehozott interop-szerelvény kezeli a COM-objektumok kezelésének számos részletét, például az interop-rendezést, a paraméterek csomagolásának folyamatát, valamint az értékeket a COM-objektumokra való áttéréskor és onnan való áthelyezéskor egyenértékű adattípusokba. A Visual Basic alkalmazás hivatkozása az interop szerelvényre mutat, nem pedig a tényleges COM-objektumra.

COM-objektum használata Visual Basic 2005 és újabb verzióval

  1. Nyisson meg egy új Visual Basic Windows-alkalmazásprojektet.

  2. A Project menüben kattintson a Hivatkozás hozzáadása elemre.

    Megjelenik a Hivatkozás hozzáadása párbeszédpanel.

  3. A COM lapon kattintson ComObject1 duplán az Összetevő neve listában, és kattintson az OK gombra.

  4. A Projekt menüben kattintson az Új elem hozzáadása elemre.

    Megjelenik az Új elem hozzáadása párbeszédpanel.

  5. A Sablonok panelen kattintson az Osztály elemre.

    Az alapértelmezett fájlnév Class1.vba Név mezőben jelenik meg. Módosítsa ezt a mezőt MathClass.vb, majd kattintson a Hozzáadás gombra. Ez létrehoz egy osztályt, MathClassés megjeleníti annak kódját.

  6. Adja hozzá a következő kódot a lap tetejére MathClass , hogy örököljön a COM-osztályból.

    ' 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. Túlterhelje az alaposztály nyilvános metódusát a következő kód MathClasshozzáadásával:

    '  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. Az örökölt osztály kiterjesztése a következő kód MathClasshozzáadásával:

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

Az új osztály örökli az alaposztály tulajdonságait a COM objektumban, túlterhel egy metódust, és meghatároz egy új metódust az osztály kiterjesztéséhez.

Az örökölt osztály tesztelése

  1. Adjon hozzá egy gombot az indítási űrlaphoz, majd kattintson rá duplán a kód megtekintéséhez.

  2. A gomb eseménykezelő eljárásában Click adja hozzá a következő kódot a túlterhelt metódusok példányának MathClass létrehozásához és meghívásához:

    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. Futtassa a projektet az F5 billentyű lenyomásával.

Amikor az űrlap gombra kattint, a AddNumbers metódus először adattípus-számokkal Short lesz meghívva, a Visual Basic pedig az alaposztályból választja ki a megfelelő metódust. A második hívás a AddNumbers túlterhelési metódushoz lesz irányítva.MathClass A harmadik hívás meghívja a SubtractNumbers metódust, amely kibővíti az osztályt. Az alaposztály tulajdonsága be van állítva, és megjelenik az érték.

Következő lépések

Észrevehette, hogy a túlterhelt AddNumbers függvény adattípusa megegyezik a COM-objektum alaposztályától örökölt metódussal. Ennek az az oka, hogy az alaposztály-metódus argumentumai és paraméterei 16 bites egész számokként vannak definiálva a Visual Basic 6.0-ban, de a Visual Basic későbbi verzióiban 16 bites egész számként Short jelennek meg. Az új függvény 32 bites egész számokat fogad el, és túlterheli az alaposztályfüggvényt.

COM-objektumok használatakor győződjön meg arról, hogy ellenőrzi a paraméterek méretét és adattípusait. Ha például olyan COM-objektumot használ, amely argumentumként elfogad egy Visual Basic 6.0 gyűjteményobjektumot, nem adhat meg gyűjteményt a Visual Basic egy későbbi verziójából.

A COM-osztályoktól örökölt tulajdonságokat és metódusokat felül lehet bírálni, ami azt jelenti, hogy deklarálhat egy helyi tulajdonságot vagy metódust, amely egy alap COM-osztálytól örökölt tulajdonságot vagy metódust helyettesít. Az örökölt COM-tulajdonságok felülírására vonatkozó szabályok hasonlóak az egyéb tulajdonságok és metódusok felülírására vonatkozó szabályokhoz az alábbi kivételekkel:

  • Ha egy COM-osztálytól örökölt tulajdonságot vagy metódust felülbírál, felül kell bírálnia az összes többi örökölt tulajdonságot és metódust.

  • A paramétereket használó ByRef tulajdonságok nem bírálhatók felül.

Lásd még