Návod: Implementace dědičnosti s objekty modelu COM (Visual Basic)

Třídy jazyka Visual Basic lze odvodit z Public tříd v objektech MODELU COM, a to i ty, které byly vytvořeny v dřívějších verzích jazyka Visual Basic. Vlastnosti a metody tříd zděděných z objektů MODELU COM lze přepsat nebo přetížit stejně jako vlastnosti a metody jakékoli jiné základní třídy lze přepsat nebo přetížit. Dědičnost z objektů MODELU COM je užitečná, pokud máte existující knihovnu tříd, kterou nechcete překompilovat.

Následující postup ukazuje, jak pomocí jazyka Visual Basic 6.0 vytvořit objekt COM, který obsahuje třídu, a pak jej použít jako základní třídu.

Poznámka:

Váš počítač může v následujících pokynech zobrazovat odlišné názvy nebo umístění některých prvků uživatelského rozhraní sady Visual Studio. Tyto prvky jsou určeny edicí sady Visual Studio a použitým nastavením. Další informace najdete v tématu Přizpůsobení integrovaného vývojového prostředí.

Sestavení objektu COM, který se používá v tomto názorném postupu

  1. V jazyce Visual Basic 6.0 otevřete nový projekt knihovny DLL technologie ActiveX. Vytvoří se projekt s názvem Project1 . Má třídu s názvem Class1.

  2. V Průzkumníku projektů klepněte pravým tlačítkem myši Project1 a potom klepněte na tlačítko Vlastnosti Aplikace Project1. Zobrazí se dialogové okno Vlastnosti projektu.

  3. Na kartě Obecné v dialogovém okně Vlastnosti projektu změňte název projektu zadáním ComObject1 do pole Název projektu.

  4. V Průzkumníku projektů klepněte pravým tlačítkem myši Class1a potom klepněte na příkaz Vlastnosti. Zobrazí se okno Vlastnosti pro třídu.

  5. Name Změňte vlastnost na MathFunctions.

  6. V Průzkumníku projektů klepněte pravým tlačítkem myši MathFunctionsa klepněte na příkaz Zobrazit kód. Zobrazí se Editor kódu.

  7. Přidejte místní proměnnou pro uložení hodnoty vlastnosti:

    ' Local variable to hold property value
    Private mvarProp1 As Integer
    
  8. Přidat procedury vlastností Let a Get vlastností:

    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. Přidání funkce:

    Function AddNumbers(
       ByVal SomeNumber As Integer,
       ByVal AnotherNumber As Integer) As Integer
    
       AddNumbers = SomeNumber + AnotherNumber
    End Function
    
  10. Vytvořte a zaregistrujte objekt COM kliknutím na Vytvořit ComObject1.dll v nabídce Soubor .

    Poznámka:

    Ačkoli můžete také zveřejnit třídu vytvořenou pomocí jazyka Visual Basic jako objekt COM, nejedná se o skutečný objekt MODELU COM a nelze jej použít v tomto návodu. Podrobnosti naleznete v tématu Interoperabilita modelu COM v aplikacích rozhraní .NET Framework.

Sestavení vzájemné spolupráce

V následujícím postupu vytvoříte sestavení vzájemné spolupráce, které funguje jako most mezi nespravovaným kódem (například objektem COM) a spravovaným kódem, který Visual Studio používá. Sestavení vzájemné spolupráce, které Visual Basic vytváří, zpracovává mnoho podrobností o práci s objekty MODELU COM, jako je například zařazování zprostředkovatele, proces balení parametrů a vrácení hodnot do ekvivalentních datových typů při přechodu na a z objektů MODELU COM. Odkaz v aplikaci jazyka Visual Basic odkazuje na sestavení vzájemné spolupráce, nikoli na skutečný objekt COM.

Použití objektu COM s jazykem Visual Basic 2005 a novějšími verzemi

  1. Otevřete nový projekt aplikace pro Windows jazyka Visual Basic.

  2. V nabídce Projekt klepněte na tlačítko Přidat odkaz.

    Zobrazí se dialogové okno Přidat odkaz .

  3. Na kartě COM poklikejte ComObject1 v seznamu Název komponenty a klepněte na tlačítko OK.

  4. V nabídce Projekt klepněte na tlačítko Přidat novou položku.

    Zobrazí se dialogové okno Přidat novou položku .

  5. V podokně Šablony klepněte na položku Třída.

    Výchozí název Class1.vbsouboru se zobrazí v poli Název . Změňte toto pole na MathClass.vb a klikněte na Přidat. Tím se vytvoří pojmenovaná MathClasstřída a zobrazí se jeho kód.

  6. Do horní části MathClass třídy COM přidejte následující kód, který dědí z třídy COM.

    ' 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. Přetěžte veřejnou metodu základní třídy přidáním následujícího kódu do 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. Rozšiřte zděděnou třídu přidáním následujícího kódu do 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
    

Nová třída dědí vlastnosti základní třídy v objektu COM, přetíží metodu a definuje novou metodu pro rozšíření třídy.

Testování zděděné třídy

  1. Přidejte tlačítko do spouštěcího formuláře a poklikáním na něj zobrazte jeho kód.

  2. V obslužné Click rutině události tlačítka přidejte následující kód pro vytvoření instance MathClass a volání přetížených metod:

    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. Spusťte projekt stisknutím klávesy F5.

Když kliknete na tlačítko ve formuláři, AddNumbers metoda je nejprve volána s Short čísly datových typů a Visual Basic zvolí příslušnou metodu ze základní třídy. Druhé volání AddNumbers je směrováno na metodu přetížení z MathClass. Třetí volání volá metodu SubtractNumbers , která rozšiřuje třídu. Vlastnost v základní třídě je nastavena a hodnota je zobrazena.

Další kroky

Možná jste si všimli, že přetížená AddNumbers funkce má stejný datový typ jako metoda zděděná ze základní třídy objektu COM. Důvodem je to, že argumenty a parametry metody základní třídy jsou definovány jako 16bitové celé číslo v jazyce Visual Basic 6.0, ale jsou vystaveny jako 16bitové celá čísla typu Short v novějších verzích jazyka Visual Basic. Nová funkce přijímá 32bitové celá čísla a přetěžuje funkci základní třídy.

Při práci s objekty MODELU COM ověřte velikost a datové typy parametrů. Pokud například používáte objekt MODELU COM, který přijímá objekt kolekce jazyka Visual Basic 6.0 jako argument, nelze poskytnout kolekci z novější verze jazyka Visual Basic.

Vlastnosti a metody zděděné z tříd MODELU COM lze přepsat, což znamená, že můžete deklarovat místní vlastnost nebo metodu, která nahrazuje vlastnost nebo metodu zděděnou ze základní třídy MODELU COM. Pravidla pro přepsání zděděných vlastností modelu COM jsou podobná pravidlům pro přepsání jiných vlastností a metod s následujícími výjimkami:

  • Pokud přepíšete jakoukoli vlastnost nebo metodu zděděnou z třídy COM, musíte přepsat všechny ostatní zděděné vlastnosti a metody.

  • Vlastnosti, které používají ByRef parametry, nelze přepsat.

Viz také