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