Typ wariantu (COM)

Variant to typ danych w niektórych językach programowania, w szczególności w Visual Basic , OCaml , Delphi i C++ , gdy używany jest Component Object Model . Jest to realizacja tytułowej koncepcji w informatyce .

W języku Visual Basic (i Visual Basic for Applications ) typ danych Variant jest związkiem oznaczonym , którego można użyć do reprezentowania dowolnego innego typu danych (na przykład liczby całkowitej , zmiennoprzecinkowej , pojedynczej i podwójnej precyzji, obiektu itp.) z wyjątkiem typu łańcuchowego o stałej długości. W Visual Basic każda zmienna, która nie została jawnie zadeklarowana lub której typ nie został jawnie zadeklarowany, jest traktowana jako wariant.

Chociaż nie zaleca się używania jawnie zadeklarowanych wariantów, mogą one być przydatne, gdy potrzebny typ danych może być znany tylko w czasie wykonywania, gdy oczekuje się, że typ danych będzie się zmieniał lub gdy pożądane są opcjonalne parametry i tablice parametrów. W rzeczywistości języki z dynamicznym systemem typów często mają wariant jako jedyny dostępny typ dla zmiennych.

Wśród głównych zmian w Visual Basic .NET , będącym językiem .NET, typ wariantu został zastąpiony typem obiektowym .NET . Istnieją podobieństwa w koncepcji, ale także znaczne różnice, a między tymi dwoma typami nie ma bezpośrednich konwersji. W przypadku konwersji, które mogą być potrzebne, jeśli kod Visual Basic .NET współdziała z obiektem Visual Basic 6 COM, normalną metodologią jest użycie organizowania platformy .NET .

Przykłady

W Visual Basic wariant o nazwie A można zadeklarować jawnie lub niejawnie:

 
    Wym.  A  Wym.  A  jako  wariant 

W Delphi wariant o nazwie A jest deklarowany w następujący sposób:

   var  A  :  wariant  ; 

Format

Zmienna typu wariant, dla zwięzłości nazywana „wariantem”, zgodnie z definicją w Visual Basic, potrzebuje 16 bajtów pamięci, a jej układ jest następujący:

Zrównoważyć Rozmiar Opis
0 2 Wartość zwrócona przez VarType; określa, jakie dane zawiera wariant.
2 6 Zarezerwowane bajty; używany tylko dla typu VT_DECIMAL.
8 do 8 Dane, które zawiera wariant.

typy

Oto kilka przykładów wariantów, które można napotkać w Visual Basic. W innych językach można również stosować inne rodzaje wariantów.

VarType Klątwa Właściwy typ Członek prowizoryczny Wpisz imię Bajty danych typu C i C++
0 0x00 VT_EMPTY Nic Pusty 1
1 0x01 VT_NULL Nic Zerowy 2
2 0x02 VT_I2 iVal Liczba całkowita 2A00 KRÓTKI
3 0x03 VT_I4 lWart Długi 2A000000 DŁUGI
4 0x04 VT_R4 fltVal Pojedynczy 00002842 PLATFORMA
5 0x05 VT_R8 dblVal Podwójnie 0000000000004540 PODWÓJNIE
6 0x06 VT_CY cyVal Waluta A068060000000000 Struktura CY
7 0x07 VT_DATE data Data 00000000C0D5E140 DATA (podwójna)
8 0x08 VT_BSTR bstrVal Strunowy xxxxxxxxx (BSTR):(OLECHAR *):(WCHAR *):( wchar_t *)
9 0x09 VT_DISPATCH pdispVal
10 0x0a VT_ERROR kod Błąd 2A000A80 HWYNIK (long int)
11 0x0b VT_BOOL boolVal logiczne FFFF VARIANT_BOOL (krótka)
12 0x0c VT_VARIANT pvarVal Wariant WARIANT
13 0x0d VT_UNKNOWN punkVal nic 4 00000000 INieznany *
14 0x0e VT_DECIMAL wartość dziesiętna DZIESIĘTNY
16 0x10 VT_I1 cVal Bajt ZWĘGLAĆ
17 0x11 VT_UI1 bVal Bajt 2A BYTE (znak bez znaku)
18 0x12 VT_UI2 uiVal SŁOWO (krótkie bez znaku)
19 0x13 VT_UI4 ulWart DWORD (int bez znaku)
20 0x14 VT_I8 hVal
21 0x15 VT_UI8 uhVal
22 0x16 VT_INT intVal
23 0x17 VT_UINT uintVal
24 0x18 VT_VOID
25 0x19 VT_HRESULT brak 3 80020004 HWYNIK (long int)
26 0x1a VT_PTR
27 0x1b VT_SAFEARRAY parować
28 0x1c VT_CARRAY
29 0x1d VT_USERDEFINED
30 0x1e VT_LPSTR pszVal
31 0x1f VT_LPWSTR pwszVal
36 0x24 VT_REKORD
37 0x25 VT_INT_PTR kufelVal
38 0x26 VT_UINT_PTR puintVal
8192 0x2000 VT_ARRAY parować
9 Odniesienie do obiektu 5 xxxxxxxxx INieznany *
  • 1 Typ niezainicjowanego wariantu.
  • 2 Typ wartości NULL w bazie danych, czyli nie jest niezainicjowany ani nie jest odpowiednikiem pustego wskaźnika C++ .
  • 3 Brakujące argumenty to w rzeczywistości konkretna wartość błędu zatytułowana „nie znaleziono parametru”.
  • 4 Typ obiektu ustawiony na odwołanie o wartości null.
  • 5 TypeName zwróci nazwę klasy zawartego obiektu. Dane byłyby interfejsu , czyli wskaźnikiem do wskaźnika do wirtualnej tabeli metod (która jest tablicą wskaźników funkcji).

Typowe zastosowania

Kolekcje

Klasa Collection w OLE Automation może przechowywać elementy różnych typów danych. Ponieważ typ danych tych elementów nie może być znany w czasie kompilacji, metody dodawania elementów do i pobierania elementów z kolekcji wykorzystują warianty. Jeśli w języku Visual Basic For Each , zmienna iteratora musi być typu obiektowego lub wariantu.

Wywołania metody wysyłki

W OLE Automation interfejs IDispatch jest używany, gdy nie można z góry poznać klasy obiektu. Dlatego podczas wywoływania metody na takim obiekcie typy argumentów i zwracana wartość nie są znane w czasie kompilacji. Argumenty są przekazywane jako tablica wariantów, a po zakończeniu wywołania zwracany jest wariant.

Opcjonalne parametry

W języku Visual Basic argument procedury można zadeklarować jako opcjonalny, poprzedzając go słowem kluczowym Opcjonalnie . Gdy argument zostanie pominięty, Visual Basic przekazuje do procedury specjalną wartość, zwaną Missing , wskazującą, że brakuje argumentu. Ponieważ wartość może być wartością dostarczoną lub wartością specjalną, należy użyć wariantu.

     
      
          
    
          
     
  Funkcja  GetText  (  opcjonalnie  ByVal  Index  )  jako  String  If  IsMissing  (  indeks  )  Then  GetText  =  Item  (  CurrentItem  )  Else  GetText  =  Item  (  indeks  )  End  If  End  Funkcja 

Podobnie słowo kluczowe ParamArray może być użyte do przekazania wszystkich kolejnych argumentów w tablicy wariantów.

Zobacz też

Linki zewnętrzne