VB.NET之旅(三)—共享成員。本站提示廣大學習愛好者:(VB.NET之旅(三)—共享成員)文章只能為提供參考,不一定能成為您想要的結果。以下是VB.NET之旅(三)—共享成員正文
我開端佩服起大李來了,同時對VB.NET充溢了獵奇與理解的盼望。
“除了全局變量外,還有什麼好方法嗎?”我迫不急待地想知 道後果。
“可以運用共享成員。”大李仍然是那麼淡漠然, “VB.NET如今是支持真正的面向對象編程,可以承繼、運用多態、共享成員 和靜態成員。共享成員就是在一切類和所定義派生類的實例之間共享的辦法、屬 性、字段和事情。一切運用類創立的對象都可以訪問相反的數據、共享完成進程 ,並且收到相反的激起事情。”
“這麼好呀,那怎樣完成呢? ”我好象又回到了課堂上,滿腦都是無知的符號。
“很復雜, 在Public或Private成員修飾符後加上Shared關鍵字即可了。Shared關鍵字指示一 個或多個被聲明的編程元素將被共享。共享元素不關聯於某類或構造的特定實例 。可以經過運用類名或構造稱號或許類或構造的特定實例的變量稱號限定共享元 從來訪問它們。你來看這段代碼
Public Class ShareClass Public Shared SharedValue As String Public Shared Sub ShareMethod() MsgBox("This is a shared method.") End Sub End ClassSub TestShared() Dim Shared1 As New ShareClass() ' 創立了類的一個實例. Dim Shared2 As New ShareClass() '創立了類的第二個實例. Shared1.SharedValue = "Share Value 1" '給共享字段賦值. Shared2.SharedValue = "Share Value 2" ' 重寫共享字段的值 ShareClass.ShareMethod() '不必創立實例就可以調用類的辦法. End Sub
“有兩個要點,一個是共享成員假如是辦法或屬性,我 們不必創立實例就可以直接用‘類名.共享成員’的辦法停止調用;第 二個要點,共享字段是獨一的,你來說說運轉後Shared1.SharesValue的值是多少 ?”
我頭腦裡轉了兩圈,既然說共享字段是獨一的,那麼 Shared1.SharedValue和Shared2.SharedValue其實對應的是同一個共享字段,所 以麼,我立即大聲說:“是Share Value 2。由於被Shared2.SharedValue修 改了。”
“沒錯!”大李又一次綻放了會意的淺笑,真 是對我的最高獎賞。“那你還不入手修正一下你的順序?”
好 !說做就做。既然共享屬性在其調用的時分是不必實例化的,那麼我最好能借助 結構一個共享屬性來完成。並且要可以判別其實例能否存在或能否被銷毀,假如 不存在就結構一個新的窗體實例,假如存在就對其停止調用:
Private Shared m_vb6FormDefInstance As Form1 Public Shared Property DefInstance() As Form1 Get If m_vb6FormDefInstance Is Nothing OrElse _ m_vb6FormDefInstance.IsDisposed Then ‘判別窗體 實例能否存在 m_vb6FormDefInstance = New Form1() End If DefInstance = m_vb6FormDefInstance End Get Set(ByVal Value As Form1) m_vb6FormDefInstance = Value End Set End Property
在Form2中也參加類似的代碼,只不過把Form1改為Form2 。調用它是如此的方便:
//Form1中的代碼 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Hide() Form2.DefInstance.Show() End Sub //Form2中的代碼 Private Sub Button1_Click(ByVal sender As _ System.Object, ByVal e As System.EventArgs) _ Handles Button1.Click Me.Hide() Form1.DefInstance.Show() End Sub Private Sub Form2_Closing(ByVal sender As Object,_ ByVal e As System.ComponentModel.CancelEventArgs) _ Handles MyBase.Closing Form1.DefInstance.Show() End Sub
趕忙運轉一下,不對呀,第一個窗體裡文本框改為 “Henry的作品”後,再切換仍是不見了?我疑惑地低頭看了看大李。
“你再好好想想,第一次啟動的是什麼?”大李模糊地說了一 句。
“第一次啟動的是作為主線程的Form1窗體呀!”我嘟啷 著說。
“那麼Form1.DefInstance在哪呢?”大李這句話真是 驚醒夢中人呀!
我立即入手:
Module Module1 Sub Main() Application.Run(Form1.DefInstance) End Sub End Module
並把Module1設為啟動項目。運轉運轉……哈 哈,一切都如意!我開端喜歡上VB.NET了。