不定型別

不定型別是目前程式語言中所擁有的一種資料型別，常用於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，一個變數可以透過明確或含糊的宣告，令它成為一個不定型別的變數：
Dim A
Dim A as Variant
如果在 Delphi想要這樣做，則可使用如下的程式碼：
var A: variant;

格式
在Visual Basic中，一個不定型別需要使用16個位元組的空間去儲存資料；
偏移大小說明02VarType，用以記錄此一不定型所儲存的資料類型。26空白，必須被設成0。8小於等於8此一變數實際儲存的資料。

型別
以下為在Visual Basic中不定型可能會儲存的資料型別：
VarType資料型別C型別型別名稱0Empty11Null2102A000A80HRESULT （長整數）Error1080020004HRESULT （長整數）Missing3172A位元組 （無符號字元）位元組11FFFFVARIANT_BOOL （短整數）布林值22A00短整數整數32A000000長整數長整數400002842浮點數單精度浮點數50000000000004540雙精度浮點數雙精度浮點數6A068060000000000CY結構貨幣700000000C0D5E140日期（雙精度浮點數）日期8xxxxxxxxBSTR （闊字元指標）字串900000000IUnknown指標Nothing49xxxxxxxxIUnknown指標對象參址5
1 代表一個尚未被初始化的不定型別
2 代表資料庫裡沒有資料的欄位，即NULL（空值）。此NULL不應與未初始化的變數，或是C語言裡的NULL指針混淆。
3 一般用在呼叫函數時。當一個函數的參數被省略，那麼就會傳入這個數值代替。
4 代表此對象的參址被設為NULL。
5 代表此變數是一個指向一個物件的界面的指針，也就是說它會指向該物件的函數指針表。

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

可選參數
在Visual Basic，一個函數的參數可以使用Optional關鍵字，把它設成一個可選的參數。當使用這個函數時可選參數沒有被傳入，那麼Visual Basic就會用一個叫Missing的特別數值取代被省略的參數。
Function GetText(Optional ByVal Index) As String
    If IsMissing(Index) Then
        GetText = Item(CurrentItem)
    Else
        GetText = Item(Index)
    End If
End Function

Category:数据类型