不定類型

不定類型

不定類型是程式語言中所擁有的一種數據類型,常用於Visual Basic及C++中。在Visual Basic(及Visual Basic for Applications)中,不定類型是一種標籤聯合,用以表達任何一種數據類型(例如整數、雙精度及單精度浮點數、對象等等),除了固定長度字元串或結構體。任何在Visual Basic中並未明確指定數據類型的變數,也會被當成不定類型來進行處理。

簡介

在電腦程式中,不明確地宣告變數類型是一個不太好的習慣,但當一個數據的類型只有在運行時期才能被確定時,它就顯得相當的有用。實際上一部分動態類型的程式語言里,通常就只有不定類型這一種數據類型,即程式中沒有明確定義變數的數據類型。

在Visual Basic.NET里,因為面向對象概念被引入,所以不定類型被.NET的Object類型所取代。Object類型和不定類型在概念上很相似,但卻大大不同,而且無法互相轉換。當Visual Basic.NET需要與Visual Basic的COM對象互動,通常需要先透過.NET的一些程式進行轉換。

數據類型

數據的抽象結構的說明形式。同一類型的數據,其各成分都具有相同的特性,可進行相同的操作。程式中出現的每個變數、常量或表達式的值,都屬於確定的數據類型。變數的所有可能取值,以及在這些值上可允許的操作,都由數據的類型在程式中顯式地或隱式地規定。數據類型可分為簡單類型和複合類型兩種:

簡單類型,具有相同的數學特性和相同的計算機內部表示法,其數據的邏輯結構特點是只包含一個初等項的結點。通常有五種基本的簡單類型:整數類型、實數類型、布爾類型、字元類型和指針類型。

複合類型,或稱組合類型或結構類型。是由簡單類型用某種方式組合而成的。根據不同的構造方法,可構成以下不同的數據結構類型:

•數組類型。所有成分都屬於同一類型。

•記錄類型。各成分不一定屬於同一類型。

•集合類型。它定義的值集合是其基類型的冪集,也就是基類型的值域的所有子集的集合。

•檔案類型。屬於同一類型的各成分的一個序列,這個序列規定各成分的自然次序。

•遞歸數據結構。在數據結構的定義式中出現名本身的數據結構 。

示例

在Visual Basic,一個變數可以透過明確或含糊的宣告,令它成為一個不定類型的變數:

如果在 Delphi想要這樣做,則可使用如下的代碼:

格式

在Visual Basic中,一個不定類型需要使用16個位元組的空間去存儲數據;

偏移大小說明
02VarType,用以記錄此一不定型所存儲的數據類型。
26空白,必須被設成0。
8小於等於8此一變數實際存儲的數據。

類型

以下為在Visual Basic中不定型可能會存儲的數據類型:

VarType數據類型C類型類型名稱
0Empty
1Null
102A000A80HRESULT (長整數)Error
1080020004HRESULT (長整數)Missing
172A位元組 (無符號字元)位元組
11FFFFVARIANT_BOOL (短整數)布爾值
22A00短整數整數
32A000000長整數長整數
400002842浮點數單精度浮點數
50000000000004540雙精度浮點數雙精度浮點數
6A068060000000000CY結構貨幣
700000000C0D5E140日期(雙精度浮點數日期
8xxxxxxxxBSTR字元串
900000000IUnknown指針Nothing
9xxxxxxxxIUnknown指針對象地址

註:

•Empty代表一個尚未被初始化的不定類型

•NULL代表資料庫里沒有數據的欄位。此NULL不應與未初始化的變數,或是C語言裡的NULL指針混淆。

•Missing一般用在調用函式時。當一個函式的參數被省略,那么就會傳入這個數值代替。

•Nothing代表此對象的參址被設為NULL。

•對象參址代表此變數是一個指向一個對象的界面的指針,也就是說它會指向該對象的函式指針表。

套用

集合

在OLE里,一個集合可以存放各種不同數據類型的數據。因為在編譯時期裡面所存儲的數據一般難以預測,所以集合里用來加入數據或讀取數據的函式一般都是使用不定類型。

可選參數

在Visual Basic,一個函式的參數可以使用Optional關鍵字,把它設成一個可選的參數。當使用這個函式時可選參數沒有被傳入,那么Visual Basic就會用一個叫Missing的特別數值取代被省略的參數。

有關術語

標籤聯合

標籤聯合(tagged union)也稱可辨識聯合(discriminated union)或者變體類型(variant type),指的是這樣的一種數據結構,它能夠存儲一組不同但是固定的類型中某個類型的對象,具體是哪個類型由標籤欄位決定。這種數據結構在解釋器、資料庫和數據通信中非常有用。需要注意的是,可辨識聯合英文原詞在數學中又指不相交並集(disjoint union)。

IUnknown

在程式設計中,IUnknown接口是組件對象模型(COM)中的基礎接口。COM規格中規定COM對象至少要實現此一接口,而且其他所有的COM接口都需要派生自IUnknown接口。IUnknown提供所有COM對象都支持的兩種基本特性:利用引用計數來進行對象生命周期管理,以及訪問許多事先定義的接口。

IUnknown接口會包括一個指向虛擬方法表的指針,虛擬方法表是一個有許多函式指針的列表,函式指針會指向許多實現IUnknown接口所宣告的函式,以和接口中宣告順序相同的方式排列。而進程內調用產生的開銷大致和C++中調用虛擬方法的開銷相近。

相關詞條

熱門詞條

聯絡我們