Wskazówki: wdrażanie dziedziczenia z obiektami COM (Visual Basic)
Klasy Języka Visual Basic można tworzyć na podstawie Public
klas w obiektach COM, nawet tych utworzonych we wcześniejszych wersjach języka Visual Basic. Właściwości i metody klas dziedziczone z obiektów COM można zastąpić lub przeciążyć tak samo, jak właściwości i metody dowolnej innej klasy bazowej można zastąpić lub przeciążyć. Dziedziczenie z obiektów COM jest przydatne, gdy masz istniejącą bibliotekę klas, której nie chcesz ponownie kompilować.
Poniższa procedura pokazuje, jak utworzyć obiekt COM zawierający klasę przy użyciu języka Visual Basic 6.0, a następnie użyć go jako klasy bazowej.
Uwaga
Na komputerze w poniższych instrukcjach mogą być wyświetlane inne nazwy i lokalizacje niektórych elementów interfejsu użytkownika programu Visual Studio. Te elementy są określane przez numer wersji Visual Studio oraz twoje ustawienia. Aby uzyskać więcej informacji, zobacz Personalizowanie środowiska IDE.
Aby skompilować obiekt COM, który jest używany w tym przewodniku
W programie Visual Basic 6.0 otwórz nowy projekt biblioteki DLL ActiveX. Zostanie utworzony projekt o nazwie
Project1
. Ma klasę o nazwieClass1
.W Eksploratorze projektów kliknij prawym przyciskiem myszy pozycję Project1, a następnie kliknij polecenie Właściwości projektu Project1. Zostanie wyświetlone okno dialogowe Właściwości projektu.
Na karcie Ogólne okna dialogowego Właściwości projektu zmień nazwę projektu, wpisując
ComObject1
w polu Nazwa projektu.W Eksploratorze projektów kliknij prawym przyciskiem myszy pozycję
Class1
, a następnie kliknij polecenie Właściwości. Zostanie wyświetlone okno Właściwości dla klasy.Zmień właściwość na
Name
MathFunctions
.W Eksploratorze projektów kliknij prawym przyciskiem myszy pozycję
MathFunctions
, a następnie kliknij polecenie Wyświetl kod. Zostanie wyświetlony Edytor kodu.Dodaj zmienną lokalną do przechowywania wartości właściwości:
' Local variable to hold property value Private mvarProp1 As Integer
Dodaj procedury właściwości
Let
i właściwościGet
: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
Dodaj funkcję:
Function AddNumbers( ByVal SomeNumber As Integer, ByVal AnotherNumber As Integer) As Integer AddNumbers = SomeNumber + AnotherNumber End Function
Utwórz i zarejestruj obiekt COM, klikając pozycję Utwórz ComObject1.dll w menu Plik .
Uwaga
Mimo że można również uwidocznić klasę utworzoną za pomocą języka Visual Basic jako obiekt COM, nie jest to prawdziwy obiekt COM i nie można go użyć w tym przewodniku. Aby uzyskać szczegółowe informacje, zobacz Współdziałanie modelu COM w aplikacjach .NET Framework.
Międzyoperacyjne
W poniższej procedurze utworzysz zestaw międzyoperajowy, który działa jako mostek między kodem niezarządzanym (takim jak obiekt COM) i używanym kodem zarządzanym w programie Visual Studio. Zestaw międzyoperacyjny tworzony w języku Visual Basic obsługuje wiele szczegółów pracy z obiektami COM, takimi jak międzyoperacyjności, proces pakowania parametrów i zwraca wartości do równoważnych typów danych podczas przechodzenia do obiektów COM i z nich. Odwołanie w aplikacji Visual Basic wskazuje zestaw międzyoperajowy, a nie rzeczywisty obiekt COM.
Aby użyć obiektu COM z visual basic 2005 i nowszymi wersjami
Otwórz nowy projekt aplikacji systemu Windows w języku Visual Basic.
W menu Project (Projekt) kliknij pozycję Add Reference (Dodaj odwołanie).
Zostanie wyświetlone okno dialogowe Dodawanie odwołania .
Na karcie COM kliknij
ComObject1
dwukrotnie listę Nazwa składnika i kliknij przycisk OK.W menu Project (Projekt) kliknij pozycję Add New Item (Dodaj nowy element).
Zostanie wyświetlone okno dialogowe Dodawanie nowego elementu .
W okienku Szablony kliknij pozycję Klasa.
Domyślna nazwa pliku,
Class1.vb
, pojawia się w polu Nazwa . Zmień to pole na MathClass.vb i kliknij przycisk Dodaj. Spowoduje to utworzenie klasy o nazwieMathClass
i wyświetlenie jego kodu.Dodaj następujący kod na początku
MathClass
elementu , aby dziedziczyć z klasy 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
Przeciążenie publicznej metody klasy bazowej przez dodanie następującego kodu do
MathClass
klasy :' 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
Rozszerz dziedziczona klasę, dodając następujący kod do
MathClass
klasy :' The following function extends the inherited class. Function SubtractNumbers( ByVal SomeNumber As Integer, ByVal AnotherNumber As Integer) As Integer Return AnotherNumber - SomeNumber End Function
Nowa klasa dziedziczy właściwości klasy bazowej w obiekcie COM, przeciąża metodę i definiuje nową metodę w celu rozszerzenia klasy.
Aby przetestować dziedziczonej klasy
Dodaj przycisk do formularza uruchamiania, a następnie kliknij go dwukrotnie, aby wyświetlić jego kod.
W procedurze obsługi zdarzeń przycisku
Click
dodaj następujący kod, aby utworzyć wystąpienieMathClass
obiektu i wywołać przeciążone metody: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)
Uruchom projekt, naciskając klawisz F5.
Po kliknięciu przycisku w formularzu AddNumbers
metoda jest najpierw wywoływana przy użyciu Short
liczb typów danych, a język Visual Basic wybiera odpowiednią metodę z klasy bazowej. Drugie wywołanie metody AddNumbers
jest kierowane do metody przeciążenia z MathClass
klasy . Trzecie wywołanie wywołuje metodę SubtractNumbers
, która rozszerza klasę. Właściwość w klasie bazowej jest ustawiona, a wartość jest wyświetlana.
Następne kroki
Być może zauważysz, że przeciążona AddNumbers
funkcja wydaje się mieć taki sam typ danych, jak metoda dziedziczona z klasy bazowej obiektu COM. Dzieje się tak, ponieważ argumenty i parametry metody klasy bazowej są definiowane jako 16-bitowe liczby całkowite w języku Visual Basic 6.0, ale są uwidocznione jako 16-bitowe liczby całkowite typu Short
w nowszych wersjach programu Visual Basic. Nowa funkcja akceptuje 32-bitowe liczby całkowite i przeciąża funkcję klasy bazowej.
Podczas pracy z obiektami COM upewnij się, że sprawdzasz rozmiar i typy danych parametrów. Jeśli na przykład używasz obiektu COM, który akceptuje obiekt kolekcji Visual Basic 6.0 jako argument, nie można podać kolekcji z nowszej wersji języka Visual Basic.
Właściwości i metody dziedziczone z klas COM można zastąpić, co oznacza, że można zadeklarować lokalną właściwość lub metodę, która zastępuje właściwość lub metodę dziedziczone z klasy podstawowej COM. Reguły zastępowania odziedziczonych właściwości MODELU COM są podobne do reguł zastępowania innych właściwości i metod z następującymi wyjątkami:
Jeśli zastąpisz dowolną właściwość lub metodę dziedziczona z klasy COM, musisz zastąpić wszystkie pozostałe dziedziczone właściwości i metody.
Właściwości używające
ByRef
parametrów nie mogą zostać zastąpione.