VB.NET事件訪問器特性介紹
VB.NET編程語言中有兩種比較重要的訪問器,一種是屬性訪問器,另一種則是VB.NET事件訪問器。在這里我們會針對這兩種訪問器做一個詳細的介紹,尤其是VB.NET事件訪問器的相關應用方式。
VB.NET屬性訪問器的可訪問性
以前,一個一直困擾我的問題就是VB.NET中Get和Set訪問器必須具有相同的可訪問性(Public、Friend、或Private)。如果你想創建一個只讀的Public屬性(只有Get被公開),那么在你的組件中并沒有Set訪問器來強制確認或者自定義屬性的處理。
現在,VisualBasic2005中的Get和Set訪問器可以設置不同的可訪問性了,只是Set在訪問上必須比Get更受限制:
- Private_myPropAsString
- PublicPropertyMyProp()AsString
- Get
- Return_myProp
- EndGet
- FriendSet(ByValvalueAsString)
- Ifvalue.Trim.Length>0Then
- _myProp=value.Trim
- Else
- value="<novalue>"
- EndIf
- EndSet
- EndProperty
無論是對于團隊開發環境還是對于為了努力追求代碼***重用率的個人開發者,這個特性都相當有用。
自定義VB.NET事件訪問器
VB.NET事件訪問器允許你定義一個自定義事件,并且,你可以控制在當客戶端添加或刪除了事件處理器并引發你的事件后所發生的情況。假設你有一個自定義的類,在該類中你引發了一個RateChanged事件。你可以按照下面兩種方式其中一種來聲明普通的事件:
- PublicEventRateChanged()
- ''或者
- PublicEventHoursChangedAsEventHandler
用這種方式聲明事件會產生一個自動托管的后備存儲。換言之,系統將處理事件托管和分派的方式。通常情況下這就很好了,但是有時候,你需要對如何通知事件監聽器的方式擁有更多的控制。
你可以利用這個新的Custom關鍵字來定義一個自定義事件以及它的訪問修飾符。當你在事件聲明上敲下回車鍵后,VisualBasic2005將為你自動生成代碼原形,其生成方式就像Property訪問器那樣:
- PublicCustomEventNameChangedAsEventHandler
- AddHandler(ByValvalueAsEventHandler)
- ''把處理器與后備存儲掛鉤
- EndAddHandler 軟件開發網
- RemoveHandler(ByValvalueAsEventHandler)
- ''從后備存儲中刪除處理器
- EndRemoveHandler
- RaiseEvent(ByValsenderAsObject,ByValeAsEventArgs)
- ''激發監聽器
- EndRaiseEvent
- EndEvent
當客戶端為你的事件添加或刪除了一個處理器后,AddHandler或RemoveHandler歷程開始運作。而當事件被引發后,RaiseEvent歷程開始執行。通過這種方式,你可以按照你想要為事件托管后備存儲的方式來采取特別的操作。當你用這種方式創建了這些自定義事件,你就可以把該事件當作屬性來看待。
一個展示了自定義VB.NET事件訪問器有用一面的例子,就是當你的對象是可序列化的、并且你有一個可以被一個不可序列化的委托對象處理的事件的時候。如果你試圖通過一個普通事件來序列化你的對象,序列化就會失敗,這是因為后備該事件的存儲是不可序列化的。
【編輯推薦】