討論奇妙的VB.NET屬性
VB.NET還是比較常用的,于是我研究了一下VB.NET屬性,在這里拿出來和大家分享一下,希望對大家有用。很多人在對屬性的認識上產生了一些混亂的概念。其實屬性這個東西絕非人們想象的那么復雜。讓我們回到最基礎的概念層次上來討論屬性:所謂屬性其實就是暴露了讀/寫接口的類的內部所包含的一塊數據。按照這個定義,你可能會認為你能在類中聲明一個公共變量然后把它稱為一個屬性。當然,這種假設也不是沒有一點道理,不過,類的公共變量所對應的技術術語應該是field(域)。域和屬性之間的關鍵差別在于接口的包含性質上。現(xiàn)在暫時不對這一差別做具體解釋咱們先明白其語法用途即可,以下介紹VB.NET屬性。
在VB6中,屬性由Let、Get和Set程序來定義和操作。而在VB.NET中語法就變了。屬性被組織為單個Property代碼塊,其中針對屬性的寫(Set)和讀(Get)操作設置了子代碼塊。這一程序起到了類的私有變量之上的抽象層作用。大多數人習慣于采用類似公共變量的方式命名這些私有變量,在它們前面加上小寫的前綴字母m或者加上下劃線區(qū)分所關聯(lián)的屬性(m前綴是VB6中繼承下來的,意思是:“模塊級變量”)。舉一個例子:
- Private _ContactName As String
- Public Property ContactName()
- Get
- Return _ContactName
- End Get
- Set(ByVal Value)
- _ContactName = Value
- End Set
- End Property
我給一個假定的類ContactName創(chuàng)建了一個屬性。為了支持該屬性,我需要在類里設置一個變量存儲其實際值。ContactName私有變量就是完成這一功能的。只要我獲取或者設置了該屬性,我就等于間接地使用了該值。
那么,為什么這么做就比使用域更好一些呢?主要的原因是,如果采用域,那么就無法控制寫到變量中的數據。比方說,有的人卻偏偏要在整數域中置入字符串或者給只讀域賦值。在采用屬性的情況下,你可以在Set程序中增加邏輯來保證賦值的有效性。你甚至可以完全省略Set代碼塊把屬性設置為只讀。
VB.NET屬性真奇妙
最后,.NET還向我們提供了就被稱為屬性的內容。如果某個類標記為屬性,那么它就被賦予一些特別有意思的專門功能。比如以下的Serializable屬性。
- <Serializable()>
- Public Class MyClass
- '該類可以串行化!
- End Class
把以上的類標記為屬性之后,不論其處于什么狀態(tài)我都可以獲取其實例并寫出磁盤。在一些任何時候,我就可以對該類去串行化,就好象它始終保存在內存中一樣。.NET框架提供了大量的屬性,你甚至可以自VB.NET創(chuàng)建屬性。
【編輯推薦】