VB.NET共享成員高手經(jīng)驗(yàn)談
學(xué)習(xí)VB.NET時(shí),你可能會(huì)遇到VB.NET共享成員問(wèn)題,這里將介紹VB.NET共享成員問(wèn)題的解決方法,在這里拿出來(lái)和大家分享一下實(shí)例訪問(wèn)VB.NET共享成員。
大家都知道靜態(tài)成員在VB中叫做共享成員,雖然剛接受起來(lái)有點(diǎn)別扭,但“VB.NET共享成員”的確是名副其實(shí)的:
- Public Class Class1
- Public Shared i As Integer
- 'Other none-shared members
- End Class
不但像在C#中那樣,可以用Class1.i訪問(wèn)VB.NET共享成員i,還可以用實(shí)例變量來(lái)訪問(wèn):
- Dim c1 As New Class1
- c1.i = 100
就像i是c1的成員一樣!當(dāng)然只有一個(gè)i,任何實(shí)例去修改i的值都將導(dǎo)致所有i的值改變(因?yàn)槠鋵?shí)只有一個(gè))。甚至Me和MyClass也可以訪問(wèn)VB.NET共享成員。
- Me.i = 100
- MyClass.i = 100
這在C#中是不可能做到的,一個(gè)純正的C#程序員看到這些代碼一定會(huì)覺(jué)得匪夷所思。為了揭示它的工作原理,我們可以做下列實(shí)驗(yàn):
- Dim c1 As Class1
- c1.i = 100
注意,這里的c1為Nothing!,即使是Nothing的變量也可以訪問(wèn)VB.NET共享成員,而且不會(huì)出錯(cuò)。接下來(lái)我們實(shí)驗(yàn)更極端的情況:
- Dim o As Object = New Class1
- o.i = 100
結(jié)果——失敗,不能通過(guò)后期綁定訪問(wèn)VB.NET共享成員。現(xiàn)在結(jié)果已經(jīng)很明顯,只有在VB明確了解對(duì)象類型的情況下,才能使用實(shí)例訪問(wèn)VB.NET共享成員,VB會(huì)自動(dòng)判斷類型,然后將所有對(duì)共享成員訪問(wèn)的語(yǔ)句改寫(xiě)成
- Class1.i = 100
這樣的語(yǔ)法。Delphi也支持這一有趣的特征,而且李維在《Inside VCL》中將此說(shuō)成Delphi.NET相對(duì)于.NET的擴(kuò)展之一。
【編輯推薦】