VFB 使用者定義的型別(VFB教程2 5)

2021-08-15 20:00:52 字數 4035 閱讀 7072

此處為

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 語言檔案產生。它把所有控制項 視窗的用到的字串都寫在裡面,你會發現,開啟的軟體,文字都是空白的...