直播中
完善的面向?qū)ο笾С謶摪ǚ庋b(Encapsulation),繼承(Inheritance)和多態(tài)性(Polymorphism)。當前的VB6已經(jīng)部分地實現(xiàn)了這些支持,但仍因某些地方未能符合標準而受到責難。
封裝是指對象只顯露公用的方法和屬性。VB6已經(jīng)提供了健壯的封裝支持,具體通過Public和Private關(guān)鍵詞實現(xiàn),這兩個關(guān)鍵詞既可以用于方法,也可以用于屬性。VB.NET進一步完善了VB6的封裝支持,增加了一個Protected關(guān)鍵詞。
多態(tài)性即為“多種形態(tài)”,VB從4.0開始已經(jīng)提供多態(tài)性支持,它在VB.NET中沒有什么變化。然而,由于VB.NET中類支持兩種類型的繼承——接口繼承和實現(xiàn)繼承,多態(tài)性將有更廣泛的用途。
VB6已經(jīng)支持一種稱為接口繼承(interface inheritance)的繼承形式,VB.NET支持實現(xiàn)繼承(implementation inheritance)完善了繼承機制。過去,我們用VB的接口繼承模擬實現(xiàn)對象繼承,但現(xiàn)在不必再采用這種模擬技術(shù)。正如其他面向?qū)ο蟮恼Z言,在VB.NET中我們可以覆蓋基類的方法和屬性,也可以借助多態(tài)性創(chuàng)建出健壯的、可升級的組件。例如,假設有一個從基類Crane繼承的ForkLift類,利用下面的代碼可以覆蓋基類中Lift方法的默認實現(xiàn):
Public Class ForkLift
Inherits Crane
Overrides Sub Lift(ByRef _
Height As Double)
Height = Height + 10
End Sub
End Class
VB.NET不僅允許覆蓋方法或?qū)傩?,而且還支持方法重載(Overload)。重載是一種定義具有相同名字、不同數(shù)據(jù)類型的方法或者屬性的能力。例如,假設有一個對不同數(shù)據(jù)類型的數(shù)組進行排序的組件,我們無需為它定義多個排序方法的名字(每種數(shù)據(jù)類型一個方法名字);相反,我們可以重載單個方法名字:
Overloads Sub SortArray(ByRef _
aValues()As String)
...
Overloads Sub SortArray(ByRef _
aValues() As Integer)
...
Overloads Sub SortArray(ByRef _
aValues() As Object)
在VB.NET中,窗體以類模塊形式出現(xiàn)。它意味著類本身包含了所有構(gòu)造窗體所必需的代碼。你可能會奇怪為什么VB.NET中會看到這些代碼而以前不行,事實上這個變化帶來了許多強大的新功能,比如繼承這些窗體的能力。Microsoft稱這種技術(shù)為“可視化繼承”(Visual Inheritance)。假設我們?yōu)榇蠖鄶?shù)對話窗口設計了一個標準的格式,比如窗體某一邊有一列按鈕、某個角上有一個LOGO圖標,可視化繼承使得我們能夠設計一個窗體模板(類),需要時只需從這個基類繼承就可以得到新的對話窗口。