共用方式為


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):MustInheritNotInheritable。這些修飾詞可讓程式設計人員控制應用程式中的繼承關係。

類別宣告上的 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。

請參閱

其他資源

Visual Basic 的繼承

Visual Basic 中的介面