vb.Net編程簡介之三(轉)
2024-07-10 13:04:59
供稿:網(wǎng)友
避免null傳播(propagation)
先前版本的vb支持null傳播。null傳播的前提是null值使用在表
達式中,表達式的結果將是null,例如下面的范例,結果v都將是null
dim v
v = 1 + null
v = null + right$("sometext", 1)
v = right("sometext", 0)
null傳播在visual basic.net中將不再被支持。象上面的語句
1+null會產(chǎn)生一個類型錯誤。另外在visual basic 6.0中有兩個求左值的函數(shù):left和left$前者返回值為variant類型并且可以為空,left$函數(shù)返回值為string類型。在visual basic.net中,只有一個left函數(shù),該函數(shù)總是返回string類型值
為了使程序兼容visual basic 6.0以及visual basic.net,你需
要在代碼中加入對null檢測的代碼,在visual basic.net中,下面的函數(shù)將不再返回null值:
chr mid
command oct
curdir right
date rtrim
environ space
error str
hex time
lcase trim
ltrim ucase
由于數(shù)據(jù)庫中的數(shù)據(jù)可以包含null值,所以你需要在程序中對獲得的
數(shù)據(jù)加入代碼檢測其值是否為null。
使用以0為下界的數(shù)組
visual basic 6.0允許你使用任何整數(shù)數(shù)字作為一個數(shù)組的上界
和下界。同樣你也可以通過redim將一個variant重新定義為數(shù)組。為了能夠同.net平臺下的其它語言協(xié)同工作,visual basic.net數(shù)組必須以0作為下界,而且只有一個變量事先定義為數(shù)組后才可以使用redim函數(shù)重新定義。雖然這樣限制了數(shù)組定義的靈活性,但是這樣可以在visual basic.net和.net下的其它語言之間傳遞數(shù)組。下面的范例說明了新的定義數(shù)組的約束:
dim a(1 to 10) as integer '錯誤:下界必須為0
dim v
redim v(10) '錯誤,在沒有定義v為數(shù)組前不能使用redim
dim b(10) as integer '正確
redim b(5) as integer '正確
另外,在visual basic 6.0中, dim (0 to 10) as integer定
義了包含11各整數(shù)的數(shù)組,索引從0到10。同樣
的定義在visual basic.net下建立一個包含10個整數(shù)的數(shù)組,索引從
0到9。
基于上面的改變,option base 0|1已經(jīng)從visual basic.net中
刪除了。
當你的代碼升級到visual basic.net后,以0為下界的數(shù)組不會
改變。如果數(shù)組下界非0的話,數(shù)組會升級到一個兼容類,如下:
dim a(1 to 10) as integer
改變?yōu)?
dim a as object = new vb6.array(gettype(short), 1,10)
兼容數(shù)組類比本地數(shù)組操作起來要慢很多,同時在程序中使用它
也有限制。例如你不能將一個兼容數(shù)組類作為參數(shù)傳遞到一個以數(shù)組作為參數(shù)的函數(shù),你也不能傳遞一個兼容類到visual c#或者visual c++類中。
基于以上原因,你需要在你的visual basic 6.0代碼中使用以0
為下界的數(shù)組,避免使用redim定義數(shù)組,避免使用option base 1語句。
使用vb常量而不要使用它們所代表的值在寫代碼的時候,盡量使用vb常量而不要使用它們所代表的值。例如你要在運行時將一個窗口最大化,使用:
me.windowstate = vbmaximized 'good: constant name
而不要使用:
me.windowstyle = 2 'bad: underlying value
me.windowstyle = x 'bad: variable
在visual basic.net中,一些屬性和常量的數(shù)值發(fā)生了改變;例
如true的值由-1變?yōu)榱?。在你的代碼升級到visual basic.net后,大部分的常量會自動更改;然而如果你使用的是常量代表的數(shù)值而不是常量名,那么你就要做大量的手工更改工作。
用戶自定義數(shù)據(jù)類型中的數(shù)組和固定長度字符串
為了使visual basic.net數(shù)組和數(shù)據(jù)結構完全兼容visual
studio.net,固定長度字符串在新語言中不再被支持。在大多數(shù)情況下者不是問題,因為visual basic.net提供了兼容固定長度字符串定義的類,那么代碼:
dim myfixedlengthstring as string * 100
升級后會變成這樣:
dim myfixedlengthstring as new vb6.fixedlengthstring(100)
然而,在數(shù)據(jù)結構(例如用戶自定義數(shù)據(jù))中使用固定長度字符
串類可能產(chǎn)生錯誤。因為在用戶自定義數(shù)據(jù)結構建立時類不會被建立。用戶自定義數(shù)據(jù)中的固定長度數(shù)組也會產(chǎn)生同樣的問題。
當你的代碼升級后,在代碼中的用戶自定義數(shù)據(jù)類型中如果有固
定長度的數(shù)組和字符串的話,在定義位置會添加注釋提醒你在使用用戶自定義數(shù)據(jù)類型前首先對字符串或者數(shù)組進行初始化。然而,你可以在你的visual basic 6.0的用戶自定義類型中將固定長度的字符串定義改變?yōu)樽址x,將固定長度數(shù)組定義改變?yōu)槲闯跏蓟瘮?shù)組來
避免升級產(chǎn)生后產(chǎn)生上面的問題。例如:
private type mytype
myarray(5) as integer
myfixedstring as string * 100
end type
sub bar()
dim myvariable as mytype
end sub
升級后會變?yōu)椋?br>
private type mytype
myarray() as integer
myfixedstring as string
end type
sub bar()
dim myvariable as mytype
redim myvariable.myarray(5) as integer
myvariable.myfixedstring = string$(100, " ")
end sub
avoid legacy features
避免使用從原始basic繼承的特性,如下的關鍵字在新版本語言中將
不再出現(xiàn):
def
computed goto/gosub
gosub/return
option base 0|1
varptr, objptr, strptr
lset