此處為
visualfreebasic程式設計教程(從零開始學或vb高階)
的子章節部分,全部目錄點鏈結。
自定義型別
可以由程式設計師建立的變數的特殊型別。使用者定義型別(udt)實際上只是乙個容器,其中包含一些其他變數,如排列,但不同於陣列udt可以容納different 變數型別(而陣列始終包含same 的許多變數)型別)。事實上,udt甚至可以擁有程式!
成員儲存在udt內的不同變數和/或過程稱為「成員」,或更一般地稱為項。成員可以是任何型別的變數,包括數值型別,字串指標,列舉,甚至陣列。變數在udt中建立的方式與變數正常建立的方式大致相同,但dim關鍵字是可選的。udt成員可以通過。操作者訪問,所以例如,如果您在udt中建立了乙個名為somevar的變數,您將使用udt變數的名稱後跟「.somevar」來訪問它。這是乙個例子:
'define a udt called mytype, with an integer member named somevar
type mytype
as integer somevar
end type
'create a variable of that type
dim myudt as mytype
'set the member somevar to 23, then display its contents on the screen
myudt.somevar = 23
print myudt.somevar
請注意,型別...結束型別實際上並不建立該型別的變數,它只定義該型別的變數。您必須建立乙個實際使用該型別的變數!
udt指標
顧名思義,udt指標是指向udt的指標。它們被建立為常規指標,但有一種特殊的方式來使用它們。要訪問由指標指向的udt的成員,請使用 - >運算子.例如,如果myudtptr是乙個指向具有成員somevar的udt的指標,那麼您將訪問成員為myudtptr->somevar,這對於同樣有效的*(myudtptr).somevar是乙個更為清晰的簡寫。
type rect
x as integer
y as integer
end type
dim r as rect
dim rp as rect pointer = @r
rp->x = 4
rp->y = 2
print "x = " & rp->x & ", y = " & rp->y
sleep
型別別名
變數或物件型別的附加名稱
型別別名是型別的替代名稱。它們可以用於促進從一種型別到另一種型別的質量更改,儲存打字或使迴圈依賴成為可能。
使用type關鍵字宣告型別別名,就像用外部或dim宣告變數或物件。
以下示例宣告乙個型別別名single,稱為「float 」,乙個過程,並定義和初始化該型別的兩個變數:
type float as single
dim foo as float = 1.23
dim bar as float = -4.56
過程指標型別別名以相同的方式宣告,如以下示例所示:
type func_t as function (byref as string) as integer
dim func as func_t = @f
function f (byref arg as string) as integer
function = cint(arg)
end function
過載
類別別名就是別名。對於所有意圖和目的,類別別名is其別名的型別。因此,就過程過載而言,使用型別「alias_to_t 」引數宣告的過程與使用型別「t 」引數宣告的過程相同(同樣適用於過載成員過程)。
換句話說,這是乙個錯誤重複的定義 - 宣告乙個過程,其中引數僅在型別和別名中有所不同,如下例所示:
type float as single
declare sub f overload (a as single)
'' if uncommented, this will generate a duplicated definition error
'' declare sub f (a as float)
指向過程指標的指標
指向過程指標的指標就像任何其他指標型別一樣,除了指向過程指標。因為宣告過程指標的語法不允許在過程是函式時直接建立指向過程指標的指標(因為ptr適用於返回型別,而不適用於過程),因此使用型別別名。
以下示例宣告乙個指向返回整數指標的過程的指標,然後指向指向返回整數的過程的指標:
dim pf as function() as integer ptr
type pf_t as function() as integer
dim ppf as pf_t ptr
輸入**
型別別名可以是前向引用:別名可以引用尚未完全定義的其他型別。
type foo as bar
type sometype
f as foo ptr
end type
type bar
st as sometype
a as integer
end type
使用型別別名和**引用允許型別之間的迴圈依賴關係。
type list as list_
type listnode
parent as list ptr
text as string
end type
type list_
first as listnode ptr
count as integer
end type
不完整的型別
乙個型別被認為是不完整的,直到它的大小,即在記憶體中需要占用的位元組數是已知的,並且所有欄位的偏移是已知的。不可能為不完整的型別賦值空間。不可能宣告具有不完整型別的資料型別的變數,將不完整型別作為引數傳遞,或訪問不完整型別的成員。
然而,指向不完整型別的指標可以被賦值,在其他型別中被宣告為成員,或者作為引數傳遞給過程,因為指標的大小是已知的。
type sometype as sometype_
'' not allowed since size of sometype is unknown
'' type incomplete
'' a as sometype
'' end type
'' allowed since size of a pointer is known
type complete
a as sometype ptr
end type
dim x as complete
'' not allowed since size of sometype is still unknown
'' dim size_sometype as integer = sizeof( sometype )
'' complete the type
type sometype_
value as integer
end type
'' allowed since the types are now completed
dim size_sometype as integer = sizeof( sometype )
type completed
a as sometype
end type
dim size_completed as integer = sizeof( completed )
VFB 宣告(VFB教程2 4)
此處為 visualfreebasic程式設計教程 從零開始學或vb高階 的子章節部分,全部目錄點鏈結。初始化陣列,變數和udt支援變數初始化。語法dim scalar symbol as datatype expression dim array symbol lbound to ubound a...
VFB 使用 MDI 窗體(VFB教程1 6)
此處為 visualfreebasic程式設計教程 從零開始學或vb高階 的子章節部分,全部目錄點鏈結。mdi 指的是 多文件介面 是乙個標準的 gui 概念,可以看到在許多當今流行的應用程式。下面的顯示 mdi 應用程式。正如你所看到的 mdi 允許一次顯示多個窗體的方法。只是由窗體的標題欄上單擊...
VFB 多國語言 本地化 (VFB教程1 5)
此處為 visualfreebasic程式設計教程 從零開始學或vb高階 的子章節部分,全部目錄點鏈結。在工程屬性裡選中多語言支援,然後正常寫軟體。當你編譯後,在工程輸出裡,有個 default.lang 語言檔案產生。它把所有控制項 視窗的用到的字串都寫在裡面,你會發現,開啟的軟體,文字都是空白的...