国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

VB.NET中的類

2024-07-10 13:02:35
字體:
來源:轉載
供稿:網友
我在以前的文章里曾經提到:vb.net的出現使得vb6在類的概念及其操作上發生了巨大的變化。現在就讓我們進到這些變化中來進行更深入的探討。首先讓我們看看類到底意味著什么。

不妨假設我把你帶回到了學院,現在你走進一個教室,我要求你解釋一下什么是類(class),你可能會這樣回答:“一組學生形成一個班(class)。”呵呵,如果這樣回答,你真是歪打正著了:沒錯,在這里,組就是最關鍵的詞。用面向對象的編程思想來看,類就是存儲數據同時給一組相關代碼賦予協調功能的方式。類是面向對象編程的核心。

.net賦予類的新面目
vb6和vb.net在類的用法上有一個首要的顯著差別,那就是后者不再采用set關鍵詞了。除此以外,在代碼中定義類的方法也有所改變。這些變動不僅會直接影響你編寫的代碼而且更會改變你組織源文件的方式。

在vb6下,每個類都必須在單個源文件內增加和定義。而在vb.net下就不是這樣了:類以代碼塊的形式定義,如下所示:

public class myclass
    '在這里編寫類的成員代碼!
end class

面對如此革命性的變化,有些人可能會急得嘴角發泡,而大多數人卻可能并不在乎或不明白用代碼塊定義類到底用什么用。說真的,這全看你的口味。有些人喜歡而且希望一個文件中就只定義一個類,而另一些人則更愿意邏輯地組織他們的類。例如,如果你有一個product類,同時又有了一個對應的products collection類,那么你完全可以把它們放在同一文件里以便更好地組織源文件。

類的構造和析構——舊貌換新顏
當你的代碼在創建一個類的實例時會調用該類的一個特殊方法:構造器(constructor)。同樣的,在類被破壞的時候則會調用析構器(destructor)方法。在大多數面向對象語言里牽扯到類的構造和析構時通常都采用了以上兩個一般術語而非具體編碼時的成員名。我則喜歡采用術語“structors”來引用構造和析構。在vb6語言里,具體的“structors”是class_initialize和class_terminate。在vb.net下,class_initialize方法則被重命名為new,而class_terminate則成了finalize。

按照vb6對類構造器的實現限制,程序員不得給該方法添加參數。然而,vb.net中則對構造器方法提供了參數支持。在vb.net下,你現在可以隨意地把參數添加到這個方法中來,甚至可以重載該方法。

參數化的構造器如何靈活地創建類呢?舉個例子,假設有一個ado connection類。用vb6語言的話,你首先得把該類實例化,然后在代碼中用connectionstring屬性定義連接。要用vb.net的話,這個類的構造器就被參數化和重載了,這樣,在程序員給對象實例化時就可以給它傳遞一個連接字符串,這樣你就不必關心代碼內如何設置以后的連接了。當然,你完全可以按老辦法做:什么參數都不傳遞,以后在代碼中設置連接字符串。

域和屬性
很多人在對屬性的認識上產生了一些混亂的概念。其實屬性這個東西絕非人們想象的那么復雜。讓我們回到最基礎的概念層次上來討論屬性:所謂屬性其實就是暴露了讀/寫接口的類的內部所包含的一塊數據。按照這個定義,你可能會認為你能在類中聲明一個公共變量然后把它稱為一個屬性。當然,這種假設也不是沒有一點道理,不過,類的公共變量所對應的技術術語應該是field(域)。域和屬性之間的關鍵差別在于接口的包含性質上。現在暫時不對這一差別做具體解釋咱們先明白其語法用途即可。

在vb6中,屬性由let、get和set程序來定義和操作。而在vb.net中語法就變了。屬性被組織為單個property代碼塊,其中針對屬性的寫(set)和讀(get)操作設置了子代碼塊。這一程序起到了類的私有變量之上的抽象層作用。大多數人習慣于采用類似公共變量的方式命名這些私有變量,在它們前面加上小寫的前綴字母m或者加上下劃線區分所關聯的屬性(m前綴是vb6中繼承下來的,意思是:“模塊級變量”)。舉一個例子:

private _contactname as string
public property contactname()
get
return _contactname
end get
set(byval value)
_contactname = value
end set
end property

我給一個假定的類contactname創建了一個屬性。為了支持該屬性,我需要在類里設置一個變量存儲其實際值。contactname私有變量就是完成這一功能的。只要我獲取或者設置了該屬性,我就等于間接地使用了該值。

那么,為什么這么做就比使用域更好一些呢?主要的原因是,如果采用域,那么就無法控制寫到變量中的數據。比方說,有的人卻偏偏要在整數域中置入字符串或者給只讀域賦值。在采用屬性的情況下,你可以在set程序中增加邏輯來保證賦值的有效性。你甚至可以完全省略set代碼塊把屬性設置為只讀。

屬性真奇妙
最后,.net還向我們提供了就被稱為屬性的內容。如果某個類標記為屬性,那么它就被賦予一些特別有意思的專門功能。比如以下的serializable屬性。

<serializable()>
public class myclass
'該類可以串行化!
end class

把以上的類標記為屬性之后,不論其處于什么狀態我都可以獲取其實例并寫出磁盤。在一些任何時候,我就可以對該類去串行化,就好象它始終保存在內存中一樣。.net框架提供了大量的屬性,你甚至可以自己用vb.net創建屬性。

繼承
正如你看到的那樣,vb.net的類在概念和工作方式上相比vb6.0已經發生了重要的變化。在下一篇文章里,我還會繼續對這些變化進行討論,主要是闡述類的繼承問題。大多數vb程序員都可能了解繼承,但他們卻幾乎從來沒有使用過它。我將具體解釋下繼承的重要性以及在什么情況下采用繼承

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北流市| 南丰县| 盐源县| 三江| 噶尔县| 防城港市| 射洪县| 平果县| 留坝县| 隆昌县| 徐汇区| 永修县| 微博| 张家川| 丰宁| 吉林省| 惠安县| 三门县| 新竹市| 桃江县| 师宗县| 井冈山市| 都昌县| 迁安市| 沁阳市| 芜湖市| 南皮县| 大余县| 盖州市| 石狮市| 旬阳县| 喀喇沁旗| 华阴市| 镇安县| 桑日县| 惠来县| 连云港市| 奉新县| 清镇市| 吴旗县| 林芝县|