經(jīng)常會發(fā)現(xiàn)代碼包含一些常數(shù)值,它們一次又一次地反復(fù)出現(xiàn),。還可發(fā)現(xiàn),,代碼要用到很難記住的數(shù)字— 而那些數(shù)字沒有明確意義。
在這些情況下,,可用常數(shù)大幅度地改進代碼的可讀性和可維護性,。常數(shù)是有意義的名字,取代永遠(yuǎn)不變的數(shù)值或字符串,。盡管常數(shù)有點象變量,,但不能象對變量那樣修改常數(shù),,也不能對常數(shù)賦以新值。常數(shù)有兩種來源:
內(nèi)部的或系統(tǒng)定義的常數(shù)是應(yīng)用程序和控件提供的,。在“對象瀏覽器”中的 visual basic ( vb ) ,、和 visual basic for applications ( vba ) 對象庫中列舉了 visual basic 的常數(shù)。其它提供對象庫的應(yīng)用程序,,如 microsoft excel 和 microsoft project,,也提供了常數(shù)列表,這些常數(shù)可與應(yīng)用程序的對象,、方法和屬性一起使用,。在每個 activex 控件的對象庫中也定義了常數(shù) 關(guān)于使用“對象瀏覽器”的詳細(xì)信息,請參閱“用對象編程”,。
符號的或用戶定義的常數(shù)是用 const 語句來聲明的,。下節(jié)“創(chuàng)建屬于自己的常數(shù)”中將說明用戶定義的常數(shù)。
在 visual basic 中,,常數(shù)名采用大小寫混合的格式,,其前綴表示定義常數(shù)的對象庫名。來自 visual basic 和 visual basic for applications 對象庫的常數(shù)以 “vb” 開頭— 例如vbtilehorizontal,。
設(shè)計前綴時應(yīng)盡力防止發(fā)生意外沖突,,不能出現(xiàn)常數(shù)名稱相同但表示不同數(shù)值的情況。即使使用了前綴,,兩個對象庫也仍可能包含表示不同值的相同常數(shù),。在這種情況下,引用哪個常數(shù)取決于哪個對象庫具有更高的優(yōu)先級,。關(guān)于改變對象庫優(yōu)先級的信息,,請參閱 “引用對話框”部分。
為了絕對確保不發(fā)生常數(shù)名字沖突,,可用以下語法來限定對常數(shù)的引用:
[libname.][modulename.]constname
libname 通常是控件或庫的類名,。modulename 是定義常數(shù)的模塊的名字。constname 是常數(shù)名,。在對象庫中定義了每個元素,,并能在“對象瀏覽器”中查看元素。
創(chuàng)建屬于自己的常數(shù)
聲明常數(shù)的語法是:
[public|private] const constantname[as type] = expression
參數(shù) constantname 是有效的符號名(其規(guī)則與建立變量名的規(guī)則一樣),,expression 由數(shù)值常數(shù)或字符串常數(shù)以及運算符組成,;但在 expression 中不能使用函數(shù)調(diào)用。
const 語句可以表示數(shù)量或 date / time 量:
const conpi = 3.14159265358979
public const conmaxplanets as integer = 9
const conreleasedate = #1/1/95#
也可用 const 語句定義字符串常數(shù):
public const conversion = “07.10.a”
const concodename = “enigma”
如果用逗號進行分隔,,則在一行中可放置多個常數(shù)聲明:
public const conpi = 3.14, conmaxplanets = 9, _
conworldpop = 6e+09
等號 ( = ) 右邊的表達式往往是數(shù)字或文字串,,但也可以是其結(jié)果為數(shù)或字符串的表達式(盡管表達式不能包含函數(shù)調(diào)用)。甚至可用先前定義過的常數(shù)定義新常數(shù),。
const conpi2 = conpi * 2
一旦已定義常數(shù),,就可將其放置在代碼中,,使代碼更可讀。例如:
static solarsystem (1 to conmaxplanets)
if numpeople > conworldpop then exit sub
設(shè)定用戶自定義常數(shù)的范圍
和變量聲明一樣,, const 語句也有范圍,,也使用相同的規(guī)則:
為創(chuàng)建僅存在于過程中的常數(shù),請在這個過程內(nèi)部聲明常數(shù),。
為創(chuàng)建一常數(shù),,它對模塊中所有過程都有效,但對模塊之外任何代碼都無效,,請在模塊的聲明段中聲明常數(shù),。
為創(chuàng)建在整個應(yīng)用程序中有效的常數(shù),請在標(biāo)準(zhǔn)模塊的聲明段中進行聲明,,并在 const 前面放置 public 關(guān)鍵字,。在窗體模塊或類模塊中不能聲明 public 常數(shù)。
詳細(xì)信息 關(guān)于范圍的更詳細(xì)信息,,請參閱本章前面的“理解變量的范圍”一節(jié),。
避免循環(huán)引用
由于常數(shù)可以用其它常數(shù)定義,因此必須小心,,在兩個以上常數(shù)之間不要出現(xiàn)循環(huán)或循環(huán)引用,。當(dāng)程序中有兩個以上的公用常數(shù),而且每個公用常數(shù)都用另一個去定義時就會出現(xiàn)循環(huán),。
例如:
‘在 module1 中:
public const cona = conb * 2 ’在整個應(yīng)用程序
‘中有效,。
’在 module 2:
public const conb = cona / 2 ‘在整個應(yīng)用程序
’中有效。
如果出現(xiàn)循環(huán),,在試圖運行此應(yīng)用程序時,,visual basic 就會產(chǎn)生錯誤信息。不解決循環(huán)引用就不能運行程序,。為避免出現(xiàn)循環(huán),,可將公共常數(shù)限制在單一模塊內(nèi),或最多只存在于少數(shù)幾個模塊內(nèi),。