Udostępnij za pomocą


Przewodnik: implementowanie dziedziczenia za pomocą obiektów 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 / Notatka

Na komputerze mogą być wyświetlane różne nazwy lub lokalizacje niektórych elementów interfejsu użytkownika programu Visual Studio w poniższych instrukcjach. Wersja programu Visual Studio i ustawienia, których używasz, określają te elementy. Aby uzyskać więcej informacji, zobacz Personalizowanie środowiska IDE.

Aby skompilować obiekt COM, który jest używany w tym przewodniku

  1. W programie Visual Basic 6.0 otwórz nowy projekt biblioteki DLL ActiveX. Zostanie utworzony projekt o nazwie Project1 . Ma klasę o nazwie Class1.

  2. 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 .

  3. Na karcie Ogólne okna dialogowego Właściwości projektu zmień nazwę projektu, wpisując ComObject1 w polu Nazwa projektu .

  4. 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.

  5. Zmień właściwość z Name na MathFunctions.

  6. W Eksploratorze projektów kliknij prawym przyciskiem myszy pozycję MathFunctions, a następnie kliknij polecenie Wyświetl kod. Zostanie wyświetlony Edytor kodu .

  7. Dodaj zmienną lokalną do przechowywania wartości właściwości:

    ' Local variable to hold property value
    Private mvarProp1 As Integer
    
  8. Dodaj metody dostępu do właściwości Let i właściwości 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 Property
    
  9. Dodaj funkcję:

    Function AddNumbers(
       ByVal SomeNumber As Integer,
       ByVal AnotherNumber As Integer) As Integer
    
       AddNumbers = SomeNumber + AnotherNumber
    End Function
    
  10. Utwórz i zarejestruj obiekt COM, klikając pozycję Utwórz ComObject1.dll w menu Plik .

    Uwaga / Notatka

    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 COM w aplikacjach .NET Framework.

Zestawy międzyoperacyjne

W poniższej procedurze utworzysz zestaw międzyoperacyjny, który działa jako mostek między kodem niezarządzanym (takim jak obiekt COM) a kodem zarządzanym używanym przez Visual Studio. Zestaw międzyoperacyjny tworzony w języku Visual Basic obsługuje wiele szczegółów pracy z obiektami COM, takich jak pakowanie w międzyoperacyjności, czyli proces pakowania parametrów i zwracania 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 na bibliotekę międzyoperacyjną, a nie na rzeczywisty obiekt COM.

Aby użyć obiektu COM z Visual Basic 2005 i późniejszymi wersjami

  1. Otwórz nowy projekt aplikacji systemu Windows w języku Visual Basic.

  2. W menu projektu kliknij polecenie Dodaj referencję.

    Zostanie wyświetlone okno dialogowe Dodawanie odwołania .

  3. Na karcie COM kliknij ComObject1 dwukrotnie listę Nazwa składnika i kliknij przycisk OK.

  4. W menu projektu kliknij pozycję Dodaj nowy element.

    Zostanie wyświetlone okno dialogowe Dodawanie nowego elementu .

  5. 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 nazwie MathClassi wyświetlenie jego kodu.

  6. 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
    
  7. Przeciąż publiczną metodę klasy bazowej, dodając następujący kod 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. Rozszerz dziedziczoną klasę, dodając następujący kod 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
    

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ć dziedziczoną klasę

  1. Dodaj przycisk do formularza uruchamiania, a następnie kliknij go dwukrotnie, aby wyświetlić jego kod.

  2. W procedurze obsługi zdarzeń przycisku Click dodaj następujący kod, aby utworzyć wystąpienie obiektu MathClass 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)
    
  3. Uruchom projekt, naciskając 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ążonej 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.

Dalsze 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.

Zobacz także