Návod: Implementace dědičnosti s objekty modelu COM (Visual Basic)
třídy Visual Basic můžete odvodit ze Public tříd v objektech COM, a to i těch, které byly vytvořeny v dřívějších verzích Visual Basic. Vlastnosti a metody tříd zděděných z objektů COM mohou být přepsány nebo přetíženy stejně jako vlastnosti a metody jakékoli jiné základní třídy mohou být přepsány nebo přetíženy. Dědičnost z objektů modelu COM je užitečná v případě, že máte existující knihovnu tříd, kterou nechcete znovu kompilovat.
následující postup ukazuje, jak použít Visual Basic 6,0 k vytvoření objektu modelu COM, který obsahuje třídu, a jeho následné použití jako základní třídy.
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í (IDE).
Vytvoření objektu COM, který je použit v tomto návodu
v Visual Basic 6,0 otevřete nový projekt technologie ActiveX knihovny DLL. Vytvoří se projekt s názvem
Project1. Obsahuje třídu s názvemClass1.v průzkumníku Project klikněte pravým tlačítkem na Project1 a pak klikněte na vlastnosti Project1. zobrazí se dialogové okno Project vlastnosti .
na kartě obecné v dialogovém okně vlastnosti Project změňte název projektu zadáním
ComObject1do pole Project název .v průzkumníku Project klikněte pravým tlačítkem myši
Class1a pak klikněte na vlastnosti. Zobrazí se okno vlastnosti třídy.Změňte
Namevlastnost naMathFunctions.v průzkumníku Project klikněte pravým tlačítkem myši
MathFunctionsa pak klikněte na zobrazit kód. Zobrazí se Editor kódu .Přidejte místní proměnnou pro uchování hodnoty vlastnosti:
' Local variable to hold property value Private mvarProp1 As IntegerPřidat procedury vlastností vlastností
Leta vlastností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 PropertyPřidejte funkci:
Function AddNumbers( ByVal SomeNumber As Integer, ByVal AnotherNumber As Integer) As Integer AddNumbers = SomeNumber + AnotherNumber End FunctionVytvořte a zaregistrujte objekt COM kliknutím na tlačítko nastavit ComObject1.dll v nabídce soubor .
Poznámka
i když můžete vystavit třídu vytvořenou pomocí Visual Basic jako objekt modelu com, nejedná se o skutečný objekt com a nelze ji použít v tomto návodu. podrobnosti najdete v tématu interoperabilita modelu COM v aplikacích .NET Framework.
Definiční sestavení
v následujícím postupu vytvoříte definiční sestavení, které funguje jako most mezi nespravovaným kódem (například objektem COM) a spravovaným kódem Visual Studio používá. definiční sestavení, které Visual Basic vytvoří, zpracovává mnoho podrobností o práci s objekty com, jako je například interop marshaling, proces balení parametrů a návratové hodnoty do ekvivalentních datových typů při přesunu do a z objektů COM. odkaz v aplikaci Visual Basic odkazuje na definiční sestavení, nikoli na samotný objekt modelu COM.
použití objektu COM s Visual Basic 2005 a novějšími verzemi
otevřete nový projekt aplikace Visual Basic Windows.
v nabídce Project klikněte na možnost přidat odkaz.
Zobrazí se dialogové okno Přidat odkaz .
Na kartě com poklikejte na
ComObject1seznam název součásti a klikněte na OK.v nabídce Project klikněte na příkaz přidat novou položku.
Zobrazí se dialogové okno Přidat novou položku.
V podokně šablony klikněte na Třída.
Výchozí název souboru se
Class1.vbzobrazí v poli název . Změňte toto pole na MathClass. vb a klikněte na Přidat. Tím se vytvoří třída s názvemMathClassa zobrazí se její kód.Přidejte následující kód na začátek
MathClassk dědění 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.MathFunctionsClassPřetížení veřejné metody 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 FunctionRozšíří 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 zdědí vlastnosti základní třídy v objektu COM, přetěžuje metodu a definuje novou metodu pro rozšiřování třídy.
Testování zděděné třídy
Přidejte tlačítko do formuláře po spuštění a pak dvakrát klikněte na něj, aby se zobrazil jeho kód.
V
Clickproceduře obslužné rutiny události tlačítka přidejte následující kód pro vytvoření instanceMathClassa 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)Spusťte projekt stisknutím klávesy F5.
po kliknutí na tlačítko ve formuláři AddNumbers je metoda nejprve volána s Short čísly datového typu a Visual Basic zvolí vhodnou metodu ze základní třídy. Druhé volání na AddNumbers je přesměrováno na metodu přetížení z MathClass . Třetí volání volá SubtractNumbers metodu, která rozšiřuje třídu. Vlastnost v základní třídě je nastavena a zobrazí se hodnota.
Další kroky
Možná jste si všimli, že přetížená AddNumbers funkce má stejný datový typ jako metoda zděděná od základní třídy objektu com. důvodem je, že argumenty a parametry metody základní třídy jsou definovány jako 16bitová celá čísla v Visual Basic 6,0, ale jsou vystavena jako 16bitové celé číslo typu Short v pozdějších verzích Visual Basic. Nová funkce přijímá 32 celých čísel a přetěžuje funkci základní třídy.
Při práci s objekty modelu COM ověřte, zda je nutné ověřit velikost a datové typy parametrů. například při použití objektu COM, který přijímá objekt kolekce Visual Basic 6,0 jako argument, nelze poskytnout kolekci z novější verze Visual Basic.
Vlastnosti a metody zděděné z tříd modelu COM lze přepsat, což znamená, že lze deklarovat místní vlastnost nebo metodu, která nahrazuje vlastnost nebo metodu zděděnou ze základní třídy COM. Pravidla pro přepsání zděděných vlastností modelu COM jsou podobná pravidlům pro přepsání dalších vlastností a metod s následujícími výjimkami:
Pokud přepíšete jakoukoliv vlastnost nebo metodu děděnou z třídy modelu COM, je nutné přepsat všechny ostatní zděděné vlastnosti a metody.
Vlastnosti, které používají
ByRefparametry, nelze přepsat.