不定類型

不定類型

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

基本介紹

  • 中文名:不定類型
  • 外文名:Indefinite type
  • 學科:程式語言
  • 定義:一種數據類型
  • 套用:集合
  • 有關術語:數據類型
簡介,數據類型,示例,套用,有關術語,

簡介

電腦程式中,不明確地宣告變數類型是一個不太好的習慣,但當一個數據的類型只有在運行時期才能被確定時,它就顯得相當的有用。實際上一部分動態類型的程式語言里,通常就只有不定類型這一種數據類型,即程式中沒有明確定義變數的數據類型。
在Visual Basic.NET里,因為面向對象概念被引入,所以不定類型被.NET的Object類型所取代。Object類型和不定類型在概念上很相似,但卻大大不同,而且無法互相轉換。當Visual Basic.NET需要與Visual Basic的COM對象互動,通常需要先透過.NET的一些程式進行轉換。

數據類型

數據的抽象結構的說明形式。同一類型的數據,其各成分都具有相同的特性,可進行相同的操作。程式中出現的每個變數、常量或表達式的值,都屬於確定的數據類型。變數的所有可能取值,以及在這些值上可允許的操作,都由數據的類型在程式中顯式地或隱式地規定。數據類型可分為簡單類型和複合類型兩種:
簡單類型,具有相同的數學特性和相同的計算機內部表示法,其數據的邏輯結構特點是只包含一個初等項的結點。通常有五種基本的簡單類型:整數類型、實數類型、布爾類型、字元類型和指針類型。
複合類型,或稱組合類型或結構類型。是由簡單類型用某種方式組合而成的。根據不同的構造方法,可構成以下不同的數據結構類型:
  • 數組類型。所有成分都屬於同一類型。
  • 記錄類型。各成分不一定屬於同一類型。
  • 集合類型。它定義的值集合是其基類型的冪集,也就是基類型的值域的所有子集的集合。
  • 檔案類型。屬於同一類型的各成分的一個序列,這個序列規定各成分的自然次序。
  • 遞歸數據結構。在數據結構的定義式中出現名本身的數據結構。

示例

在Visual Basic,一個變數可以透過明確或含糊的宣告,令它成為一個不定類型的變數:
Dim ADim A as Variant
如果在 Delphi想要這樣做,則可使用如下的代碼:
var A: variant;
格式
在Visual Basic中,一個不定類型需要使用16個位元組的空間去存儲數據;
偏移
大小
說明
0
2
VarType,用以記錄此一不定型所存儲的數據類型。
2
6
空白,必須被設成0。
8
小於等於8
此一變數實際存儲的數據。
類型
以下為在Visual Basic中不定型可能會存儲的數據類型:
VarType
數據類型
C類型
類型名稱
0
Empty
1
Null
10
2A000A80
HRESULT (長整數)
Error
10
80020004
HRESULT (長整數)
Missing
17
2A
位元組 (無符號字元)
位元組
11
FFFF
VARIANT_BOOL (短整數)
布爾值
2
2A00
短整數
整數
3
2A000000
長整數
長整數
4
00002842
浮點數
單精度浮點數
5
0000000000004540
雙精度浮點數
雙精度浮點數
6
A068060000000000
CY結構
貨幣
7
00000000C0D5E140
日期(雙精度浮點數
日期
8
xxxxxxxx
BSTR
字元串
9
00000000
IUnknown指針
Nothing
9
xxxxxxxx
IUnknown指針
對象地址
註:
  • Empty代表一個尚未被初始化的不定類型
  • NULL代表資料庫里沒有數據的欄位。此NULL不應與未初始化的變數,或是C語言裡的NULL指針混淆。
  • Missing一般用在調用函式時。當一個函式的參數被省略,那么就會傳入這個數值代替。
  • Nothing代表此對象的參址被設為NULL。
  • 對象參址代表此變數是一個指向一個對象的界面的指針,也就是說它會指向該對象的函式指針表。

套用

集合
在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 IfEnd Function

有關術語

標籤聯合
標籤聯合(tagged union)也稱可辨識聯合(discriminated union)或者變體類型(variant type),指的是這樣的一種數據結構,它能夠存儲一組不同但是固定的類型中某個類型的對象,具體是哪個類型由標籤欄位決定。這種數據結構在解釋器、資料庫和數據通信中非常有用。需要注意的是,可辨識聯合英文原詞在數學中又指不相交並集(disjoint union)。
IUnknown
在程式設計中,IUnknown接口是組件對象模型(COM)中的基礎接口。COM規格中規定COM對象至少要實現此一接口,而且其他所有的COM接口都需要派生自IUnknown接口。IUnknown提供所有COM對象都支持的兩種基本特性:利用引用計數來進行對象生命周期管理,以及訪問許多事先定義的接口。
IUnknown接口會包括一個指向虛擬方法表的指針,虛擬方法表是一個有許多函式指針的列表,函式指針會指向許多實現IUnknown接口所宣告的函式,以和接口中宣告順序相同的方式排列。而進程內調用產生的開銷大致和C++中調用虛擬方法的開銷相近。

相關詞條

熱門詞條

聯絡我們