Visual Basic 6.0 使用者可用的繼承
更新:2007 年 11 月
繼承可讓您從現有類別 (Class) 建立新類別。繼承提供了各類別之間的關係結構,因而可簡化應用程式的設計。由於只需撰寫新的或具有不同類別行為的程式碼,所以也支援程式碼的重複使用。
介面繼承
Visual Basic 6.0
Visual Basic 6.0 支援介面繼承,您可在 Visual Basic 6.0 使用者可以進行的介面變更中取得詳細資訊。
Visual Basic 2008
Visual Basic 2008 會使用 Interface 陳述式 (Visual Basic) 和 Implements 陳述式來支援介面繼承。如需介面的詳細資訊,請參閱 Visual Basic 中的介面。
實作繼承
透過實作繼承來建立新類別時,新類別會自動取得基底類別的所有成員和實作。現有的類別稱為「基底類別」。新類別則是「衍生類別」(Derived Class)。類別中可以加入其他成員。基底類別的行為可以藉由在新類別中寫入程式碼來變更。這種技巧稱為覆寫。
您可以繼承下列項目來建立類別:您建立的類別、加入至專案之參考中的類別,或 .NET Framework 中的物件。.NET Framework 的許多類別都和繼承相關。例如,TextBox 類別是從 System.Windows.Forms.TextBoxBase 類別繼承而來。
Visual Basic 6.0
Visual Basic 6.0 不支援實作繼承。
Visual Basic 2008
在 Visual Basic 2008 中,繼承是由 Inherits 陳述式宣告。在這個範例中,衍生類別 Oak 是繼承自基底類別 Tree。
Public Class Oak
Inherits Tree
' Add code here to extend or
' modify the behavior of the Tree class.
End Class
MustInherit 和 NotInheritable
Visual Basic 6.0
在 Visual Basic 6.0 的介面繼承中,任何類別都可做為介面基底類別。沒有任何語法可以用來避免將類別當做介面基底類別使用。同樣地,也沒有任何語法可以要求類別只能當做介面基底類別使用。
Visual Basic 2008
使用實作繼承時,Visual Basic 2008 會定義兩個修飾詞 (Modifier):MustInherit 和 NotInheritable。這些修飾詞可讓程式設計人員控制應用程式中的繼承關係。
類別宣告上的 MustInherit 修飾詞表示無法將該類別個體化:
Public MustInherit Class BaseClass
End Class
這表示 BaseClass 不能出現在 New 關鍵字之後,以及只可將繼承自 BaseClass 且沒有 MustInherit 修飾詞的類別個體化。在物件導向文獻及其他物件導向語言中,MustInherit 物件稱為「抽象」類別 (Abstract Class);不是 MustInherit 類別且可個體化的類別,稱為「具象」類別。
相關的概念是密封類別,這種類別無法做為基底類別。類別定義上的 NotInheritable 關鍵字表示了這個狀態:
Public NotInheritable Class DerivedClass
End Class
NotInheritable 類別標記出繼承階層架構 (Inheritance Hierarchy) 的邊緣。
如需詳細資訊,請參閱 Visual Basic 的繼承。
升級建議
Visual Basic 6.0 中做為介面來使用的類別在 Visual Basic 2008 中已升級為介面。請注意以下這個 Visual Basic 6.0 基底類別和衍生類別範例:
' Contents of class BaseClass
Public Sub BaseMethod()
End Sub
' Contents of class DerivedClass
Implements BaseClass
Private Sub BaseClass_BaseMethod()
End Sub
升級精靈會產生這個升級的程式碼:
Option Strict Off
Option Explicit On
Interface _BaseClass
Sub BaseMethod()
End Interface
Friend Class BaseClass
Implements _BaseClass
Public Sub BaseMethod() Implements _BaseClass.BaseMethod
End Sub
End Class
Friend Class DerivedClass
Implements _BaseClass
Private Sub BaseClass_BaseMethod() Implements _BaseClass.BaseMethod
End Sub
End Class
使用繼承而非介面,升級的程式碼可修改為:
Friend Class BaseClass
Public Sub BaseMethod()
' Add code here to define BaseMethod.
End Sub
End Class
Friend Class DerivedClass
Inherits BaseClass
End Class
這樣可以刪除一個間接取值 (Indirection) 層級 (_BaseClass)。此外,也刪除了方法定義 BaseClass_BaseMethod,因為該方法是繼承自基底類別,因此不需要重新撰寫程式碼。如果程式設計人員希望衍生類別有不同的行為,可以覆寫 BaseMethod,如下所示:
Friend Class BaseClass
Public Overridable Sub BaseMethod()
' Add code here to define BaseMethod.
End Sub
End Class
Friend Class DerivedClass
Inherits BaseClass
Public Overrides Sub BaseMethod()
' Add code here to define behavior for DerivedClass.
End Sub
End Class
在升級的介面中,要注意的一些使用技巧包括:
以 Inherits 陳述式取代 Interface 陳述式。
將基底類別實作為介面,而非會實作介面的類別。如需詳細資訊,請參閱 Visual Basic 6.0 使用者可以進行的介面變更。
將基底類別實作為 MustInherit 類別。
將衍生類別實作為 NotInheritable。