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

  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ść na NameMathFunctions.

  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 procedury 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

    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

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

  2. W menu Project (Projekt) kliknij pozycję Add Reference (Dodaj odwołanie).

    Zostanie wyświetlone okno dialogowe Dodawanie odwołania .

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

  4. W menu Project (Projekt) kliknij pozycję Add New Item (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ążenie publicznej metody klasy bazowej przez dodanie następującego kodu do MathClassklasy :

    '  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 dziedziczona klasę, dodając następujący kod do MathClassklasy :

    '  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

  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 MathClass 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)
    
  3. 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 MathClassklasy . 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.

Zobacz też