Variant

Variant

Variant 數據類型是所有沒被顯式聲明(例如 Dim、Private、Public 或 Static等語句)為其他類型變數的數據類型。Variant 數據類型並沒有類型聲明字元。

基本介紹

  • 中文名:Variant
  • 外文名:Phonetic symbol
  • : 變體型
  • : 變體
單詞釋義,數據類型,大眾Variant,

單詞釋義

音標
[]  詞性及解釋 Part of speech and defination
n. 變體,異體
a. 不同的, 有差別的
【醫】變異的; 變異體, 變型, 變種

數據類型

特殊
Variant 是一種特殊的數據類型,除了定長String數據及用戶定義類型外,可以包含任何種類的數據。Variant 也可以包含Empty、Error、Nothing及Null等特殊值。可以用VarType函式或TypeName函式來決定如何處理 Variant 中的數據。
數值數據可以是任何整型或實型數,負數時範圍從 -1.797693134862315E308 到 -4.94066E-324,正數時則從 4.94066E-324 到 1.797693134862315E308。通常,數值Variant 數據保持為其 Variant 中原來的數據類型。例如,如果把一個 Integer賦值給 Variant,則接下來的運算會把此 Variant 當成 Integer 來處理。然而,如果算術運算針對含 Byte、Integer、Long 或 Single 之一的Variant 執行,並當結果超過原來數據類型的正常範圍時,則在 Variant 中的結果會提升到較大的數據類型。如Byte則提升到 Integer,Integer 則提升到 Long,而 Long和Single 則提升為 Double。當 Variant 變數中有 Currency、Decimal 及 Double 值超過它們各自的範圍時,會發生錯誤。
適應性
可以用 Variant 數據類型來替換任何數據類型,這樣會更有適應性。如果 Variant 變數的內容是數字,它可以用字元串來表示數字或是用它實際的值來表示,這將由上下文來決定,例如:
Dim MyVar As Variant
MyVar = 98052
在前面的例子中,MyVar 內有一實際值為 98052 的數值。像期望的那樣,算術運運算元可以對 Variant 變數運算,其中包含數值或能被解釋為數值的字元串數據。如果用 + 運運算元來將 MyVar 與其他含有數字的 Variant 或數值類型的變數相加,結果便是一算術和。
Empty 值用來標記尚未初始化(給定初始值)的Variant 變數。內含 Empty 的 Variant 在數值的上下文中表示 0,如果是用在字元串的上下文中則表示零長度的字元串 ("")。
不應將 Empty 與 Null 弄混。Null 是表示 Variant 變數確實含有一個無效數據。
在 Variant 中,Error 是用來指示在過程中出現錯誤時的特殊值。然而,不像對其他種類的錯誤那樣,程式並不產生普通的應用程式級的錯誤處理。這可以讓程式設計師,或應用程式本身,根據此錯誤值採取另外的行動。可以用 CVErr 函式將實數轉換為錯誤值來產生 Error 值。
變體類型Variant
變體類型Variant,能夠在運行期間動態的改變類型。變體類型能支持所有簡單的數據類型,如整型、浮點、字元串、布爾型、日期時間、貨幣及OLE自動化對象等,不能夠表達Object Pascal對象。
1.VarArrayCreate functionCreates a variant array.創建一個變體類型的數組。function VarArrayCreate(const Bounds: array of Integer; VarType: TVarType): Variant;VarArrayOf functionCreates and fills a one-dimensional variant array.創建並且填充一個一維的變體類型的數組。function VarArrayOf(const Values: array of Variant): Variant;VarArrayCreate, VarArrayOf ExamplevarA: Variant;beginA := VarArrayCreate([0, 4], varVariant);A[0] := 1;A[1] := 1234.5678;A[2] := 'Hello world';A[3] := True;A[4] := VarArrayOf([1, 10, 100, 1000]);WriteLn(A[2]); { Hello world }WriteLn(A[4][2]); { 100 }end;2.VarArrayLock functionLocks a variant array and returns a pointer to the data.鎖住一個變體類型的數組並且返回一個指向這個數據的指針。function VarArrayLock(const A: Variant): Pointer;VarArrayLock, VarArrayUnlock ExampletypePArrayData = ^TArrayData;TArrayData = array[0..9, 1..3] of Integer;varA: Variant;P: PArrayData;I, J: Integer;beginA := VarArrayCreate([1, 3, 0, 9], varInteger);P := VarArrayLock(A);tryfor I := 0 to 9 dofor J := 1 to 3 doP^[I, J] := J * 10 + I;finallyVarArrayUnlock(A);end;WriteLn(A[1, 9]); { 19 }WriteLn(A[3, 4]); { 34 }end;3.VarArrayUnlock procedureUnlocks a variant array.procedure VarArrayUnlock(var A: Variant);VARIANT 數據類型在檔案OAIDL.IDL中定義如下:struct tagVARIANT {union {struct __tagVARIANT {VARTYPE vt;WORD wReserved1;WORD wReserved2;WORD wReserved3;union {ULONGLONG ullVal;LONGLONG llVal;LONG lVal;BYTE bVal;SHORT iVal;FLOAT fltVal;DOUBLE dblVal;VARIANT_BOOL boolVal;_VARIANT_BOOL bool;SCODE scode;CY cyVal;DATE date;BSTR bstrVal;IUnknown * punkVal;IDispatch * pdispVal;SAFEARRAY * parray;BYTE * pbVal;SHORT * piVal;LONG * plVal;LONGLONG * pllVal;FLOAT * pfltVal;DOUBLE * pdblVal;VARIANT_BOOL *pboolVal;_VARIANT_BOOL *pbool;SCODE * pscode;CY * pcyVal;DATE * pdate;BSTR * pbstrVal;IUnknown ** ppunkVal;IDispatch ** ppdispVal;SAFEARRAY ** pparray;VARIANT * pvarVal;PVOID byref;CHAR cVal;USHORT uiVal;ULONG ulVal;INT intVal;UINT uintVal;DECIMAL * pdecVal;CHAR * pcVal;USHORT * puiVal;ULONG * pulVal;ULONGLONG * pullVal;INT * pintVal;UINT * puintVal;struct __tagBRECORD {PVOID pvRecord;IRecordInfo * pRecInfo;} __VARIANT_NAME_4;} __VARIANT_NAME_3;} __VARIANT_NAME_2;DECIMAL decVal;} __VARIANT_NAME_1;};
VARIANT數據結構包含兩個域(如果不考慮保留的域)。vt域描述了第二個域的數據類型。為了使多種類型能夠在第二個域中出現,我們定義了一個聯合結構。所以,第二個域的名稱隨著vt域中輸入值的不同而改變。用於指定vt域值情況的常量在聯合的定義中以每一行的注釋形式給出。
使用VARIANT和VARIANTARG數據結構要分兩步完全。舉一個例子,讓我們考慮如下代碼:
long lValue = 999;VARIANT vParam;vParam.vt = VT_I4;vParam.lVal = lValue;
在第一行中指定數據類型。常量VT_I4表明在第二個域中將出現一個long型的數據。根據類型VARIANT的定義,可以得知,當一個long型數據存入VARIANT類型時,其第二個域使用的名稱是lVal。
使用VARIANT來傳遞參數意味著非強類型語言(例如VBScript)能夠調用使用強類型語言(C++)實現的方法。Invoke()方法的實現可以檢查參數VARIANT封裝的數值是否符合其正確的數據類型。如果符合,該類型將取出,並傳遞給調用方法。否則,Invoke()方法能夠嘗試使用 VariantChangeType()API函式來將該數值轉換成正確的類型。
typedef unsigned short VARTYPE;enum VARENUM{ VT_EMPTY = 0,VT_NULL = 1,VT_I2 = 2,VT_I4 = 3,VT_R4 = 4,VT_R8 = 5,VT_CY = 6,VT_DATE = 7,VT_BSTR = 8,VT_DISPATCH = 9,VT_ERROR = 10,VT_BOOL = 11,VT_VARIANT = 12,VT_UNKNOWN = 13,VT_DECIMAL = 14,VT_I1 = 16,VT_UI1 = 17,VT_UI2 = 18,VT_UI4 = 19,VT_I8 = 20,VT_UI8 = 21,VT_INT = 22,VT_UINT = 23,VT_VOID = 24,VT_HRESULT = 25,VT_PTR = 26,VT_SAFEARRAY = 27,VT_CARRAY = 28,VT_USERDEFINED = 29,VT_LPSTR = 30,VT_LPWSTR = 31,VT_RECORD = 36,VT_INT_PTR = 37,VT_UINT_PTR = 38,VT_FILETIME = 64,VT_BLOB = 65,VT_STREAM = 66,VT_STORAGE = 67,VT_STREAMED_OBJECT = 68,VT_STORED_OBJECT = 69,VT_BLOB_OBJECT = 70,VT_CF = 71,VT_CLSID = 72,VT_VERSIONED_STREAM = 73,VT_BSTR_BLOB = 0xfff,VT_VECTOR = 0x1000,VT_ARRAY = 0x2000,VT_BYREF = 0x4000,VT_RESERVED = 0x8000,VT_ILLEGAL = 0xffff,VT_ILLEGALMASKED = 0xfff,VT_TYPEMASK = 0xfff} ;
VARIANT支持的類型,也就是vt成員的取值如表4-3所示。
表4-3 VARIANT支持的類型
類型名
含義
VT_EMPTY
指示未指定值
VT_NULL
指示空值(類似於 SQL 中的空值)
VT_I2
指示 short 整數
VT_I4
指示 long 整數
VT_R4
指示 float 值
VT_R8
指示 double 值
VT_CY
指示貨幣值
VT_DATE
指示 DATE 值
VT_BSTR
指示 BSTR 字元串
VT_DISPATCH
指示 IDispatch 指針
VT_ERROR
指示 SCODE
VT_BOOL
指示一個布爾值
VT_VARIANT
指示 VARIANTfar 指針
VT_UNKNOWN
指示 IUnknown 指針
VT_DECIMAL
指示 decimal 值
VT_I1
指示 char 值
(續表)
類型名
含義
VT_UI1
指示 byte
VT_UI2
指示 unsignedshort
VT_UI4
指示 unsignedlong
VT_I8
指示 64 位整數
VT_UI8
指示 64 位無符號整數
VT_INT
指示整數值
VT_UINT
指示 unsigned 整數值
VT_VOID
指示 C 樣式 void
VT_HRESULT
指示 HRESULT
VT_PTR
指示指針類型
VT_SAFEARRAY
指示 SAFEARRAY
VT_CARRAY
指示 C 樣式數組
VT_USERDEFINED
指示用戶定義的類型
VT_LPSTR
指示一個以 NULL 結尾的字元串
VT_LPWSTR
指示由 nullNothingnullptrnull引用(在 Visual Basic 中為 Nothing) 終止的寬字元串
VT_RECORD
指示用戶定義的類型
VT_FILETIME
指示 FILETIME 值
VT_BLOB
指示以長度為前綴的位元組
VT_STREAM
指示隨後是流的名稱
VT_STORAGE
指示隨後是存儲的名稱
VT_STREAMED_OBJECT
指示流包含對象
VT_STORED_OBJECT
指示存儲包含對象
VT_BLOB_OBJECT
指示 Blob 包含對象
VT_CF
指示剪貼簿格式
VT_CLSID
指示類 ID
VT_VECTOR
指示簡單的已計數數組
VT_ARRAY
指示 SAFEARRAY 指針
VT_BYREF
指示值為引

大眾Variant

2010年9月3日,大眾在華推出了Variant旅行轎車,在相對小眾的細分領域,大眾再次搶占先機。Variant有舒適版和豪華版共2款,售價分別為34萬元和37.15萬元。具體售價如下
車型
售價(萬元)
舒適版
34
豪華版
37.15
大眾Variant旅行轎車,設計上獨出心裁,既優雅又飽含動感的線條。鍍鉻散熱格柵,讓前臉輪廓更神采飽滿。車門側邊條,甚至側車窗框,讓您的愛車擁有典雅別致的外形。 間隔線經典的淚滴型大燈晶瑩剔透,展現奪目光芒,為大眾汽車旅行轎車平添非凡神采;前轉向燈和前霧燈,完美的與運動型保險槓融為一體,整車線條動感渾然。大眾Variant旅行轎車,長寬高4774mm*1820mm*1517mm,軸距2709mm。配合旅行車設計,使得頭部空間和載物空間都非常充裕,完全可以滿足您對車輛功能性的各種需求 大眾Variant旅行轎車均為四驅車型,動力方面,搭載大眾的2.0TSI發動機,其最大輸出功率為200PS,最大扭矩為280N·m,與之配備的是6速DSG雙離合自動變速器。
大眾Variant大眾Variant
基本參數
車型: 旅行車
變速箱:6檔雙離合 排量 :1984cc 軸距:2709 mm 車身重量:1593 kg 理論油耗:5.5 L/100km 行李艙容積:改錯1731 L 標準座位數:5 車身尺寸:4774x1820x1517 輪轂尺寸:7.5J X 17 最大扭矩:280/1800-5000 N·m/rpm 標準引擎:TSI渦輪增壓直噴汽油發動機

相關詞條

熱門詞條

聯絡我們