重拾VB6(11) 再論資料型別

2021-04-28 14:20:04 字數 3238 閱讀 5551

來自msdn-2001-oct: visual tools and languages/visual studio 6.0 documentation/visual basic documentation/using visual basic/programmer』s guide/part 2: what can you do with visual basic/more about programming

一、建立自己的資料型別

(1)注意假如宣告了使用dim 關鍵字,標準或類模組中的使用者自定義型別將預設為公有的。假如您希望自定義型別為私有的,確保您用private 關鍵字將其宣告為私有。在窗體模組裡使用者定義型別只能宣告為私有的。

(2)如果兩個變數都屬於同乙個使用者定義型別,也可以將其中乙個變數賦給另乙個變數。這種賦值是將乙個變數的所有元素賦給另乙個變數的對應元素。yoursystem = mysystem

(3)可以使用使用者定義型別傳遞過程引數。注意如果要傳遞窗體或類模組中的使用者定義型別,則過程必須是私有的。使用者定義型別總是通過引用傳遞,所以被呼叫過程可以修改引數並將其返回到呼叫過程中。注意由於使用者定義的型別總是由引用來傳遞的,包含在使用者定義型別中的所有資料都將傳遞到過程並從過程中返回。對於包含大陣列的使用者定義型別,這將會導致較差的效能,特別是在客戶/伺服器應用程式中,在客戶/伺服器應用程式中,過程可能執行在乙個遠端機器上。在這種情況下,最好只將必要的資料從使用者定義型別中抽取並傳遞。

(4)使用者定義型別也可以包含物件。提示因為 variant 資料型別能儲存許多不同型別的資料,所以當希望使用使用者定義型別時,在許多情況下也可以使用 variant 陣列。實際上,variant 陣列比使用者定義型別更靈活,因為儲存在每個元素中的資料的型別可以隨時改變,而且還可以將陣列定義為動態的,必要時可以改變其大小。但是,variant 陣列使用的記憶體總是要多於相當的使用者定義型別。

(5)使用者定義型別可以包含其他的使用者定義型別。為了保證**的可讀性和易於除錯,應盡量將定義使用者定義資料型別的所有**限制在乙個模組的範圍內。

二、通過列舉使用常數集進行工作

(1)列舉可以通過在標準模組或公用類模組中的宣告部分用 enum 語句宣告乙個列舉型別來建立。

(2)在預設情況下,在列舉中的第乙個常數被初始化為 0,其後的常數則初始化為比其前面的常數大 1 的數值。

(3)visual basic 提供了內建的列舉 vbdayofweek,包括了與星期的七天相對應的常數。

(4)可以使用賦值語句顯式地給列舉中的常數賦值。可以賦值為任何長整數,包括負數。

(5)注意visual basic 將列舉中的常數數值看作長整數。如果將乙個浮點數值賦給乙個列舉中的常數,visual basic 會將該數值取整為最接近的長整數。

(6)當引用單個常數時,為了避免模糊引用,應在常數名稱前冠以列舉名。

debug

.print

"days.saturday = "

&days

.saturday

debug

.print

"workdays.saturday = "

&workdays

.saturday

(7)當向乙個列舉中的常數賦值時,也可以使用另乙個列舉中的常數的數值。

public

enum

workdays

sunday=0

monday

tuesday

wednesday

thursday

friday

saturday

=days

.saturday-6

invalid=-

1end

enum

(8)宣告列舉型別後,就可以宣告該列舉型別的變數,然後使用該變數儲存列舉常數的數值。

注意儘管通常只將列舉常數數值賦給列舉型別的變數,但也可以將任何長整數數值賦給該變數。當對與列舉常數不相關聯的變數賦值時,visual basic 不會產生錯誤。

三、陣列的高階功能

3.1 陣列賦值

(1)將乙個陣列賦給另外乙個陣列:

subbytecopy(

oldcopy()

asbyte

,newcopy()

asbyte)

newcopy

=oldcopy

endsub

(2)給維數和/或資料型別不同的陣列賦值的嘗試,可能成功,也可能失敗。錯誤可能發生在編譯時,也可能發生在執行時(例如,如果資料型別不能強制轉換或賦值試圖重新宣告 (redim) 乙個固定大小的陣列)。作為程式設計師,其任務就是新增錯誤處理以確保陣列在賦值之前是相容的。

3.2 從函式返回陣列

(1)陣列的資料型別必須和函式的資料型別相同(在本例中是位元組)。因為這是乙個函式呼叫,傳遞陣列時不必帶括號。注意儘管可以通過賦值給另乙個陣列(arrayfunction = x())來返回乙個陣列,但出於效能方面的考慮,並不推薦使用這種方法。

public

function

arrayfunction(b

asbyte)

asbyte()

dimx( 2)

asbyte

x( 0)

= b

x(1)

= b

+cbyte(

200)

x(2)

= b

+ b

arrayfunction=x

endfunction

dimreturnarray()

asbyte

returnarray()

=arrayfunction(b)

(2)當呼叫乙個返回陣列的函式時,用來儲存返回值的變數也必須是乙個陣列,而且其資料型別必須和函式相同,否則將顯示乙個「型別不匹配」的錯誤。

四、用集合替代陣列

在某些情況下,將專案儲存在集合中可能比儲存在陣列中效率更高。如果處理較小的、動態的專案集時,可能希望使用集合。

重拾VB6(6) 有關選單

一 用選單編輯器建立選單 1 從 工具 選單上,選取 選單編輯器 或者 在 工具欄 上單擊 選單編輯器 按鈕。2 儘管大多數選單控制項屬性可用選單編輯器設定,所有的選單屬性在 屬性 視窗中也都是可用的。3 選單控制項列表框 位於選單編輯器的下部 列出當前窗體的所有選單控制項。當在標題文字框中鍵入乙個...

重拾 堅持 沉澱

大約有將近1年左右沒有更新部落格,期間有考慮過每個月或每週花些時間來分享最近所學 所得 但總由於一些原因導致時間被占用 久而久之就漸漸淡忘了寫部落格這件事。現在回想起來感覺還是有一些後悔。其實,時間擠擠總是有的,哪怕每週一小時,乙個月下來,也能梳理出幾篇部落格。再或許是工作一定年限後,那股勁淡去了,...

重拾青藏夢

事隔一年許,才有機會靜下心來,慢慢回憶當年的青藏騎行,並記錄成文。遲遲不願動筆,一是文筆不好,有些回憶是值得留藏心裡,細細品嚐,怕寫出來會變了味,不知所謂 二是工作繁忙,著實沒那份閒情。但我又想寫點什麼,有些成長,不應該只是在記憶中埋藏。青藏線上,充滿了太多的不確定因素,嚴寒,冰雹,缺氧,高原狼,無...