更新:2007 年 11 月
如 Visual Basic 中所定義,介面是定義 Public 成員清單的型別。Interface 型別是無法個體化或實作的。
介面和類別
類別的介面是類別的 Public 成員清單。Visual Basic 2008 中的 Interface 陳述式可讓您宣告定義 Public 成員清單的型別。當類別包含 Implements 陳述式時,它會透過實作介面內每一個成員的方式,來加入介面的成員。這會與使用 Inherits 關鍵字的實作 (Implementation) 繼承 (Inheritance) 形成對比。在實作繼承中,成員是繼承自基底類別,因此不必在衍生類別中實作。
在 .NET Framework 中,類別通常會使用介面,以便在應用程式中提供某種服務的支援。舉例來說,在 .NET Framework 中,如果類別實作了 System.IComparable 介面,則當 ArrayList 中包含類別的執行個體時,執行階段將會排序這些執行個體。
如需在 Visual Basic 2008 中使用介面的詳細資訊,請參閱 Visual Basic 中的介面。
Visual Basic 6.0
在 Visual Basic 6.0 中,任何類別都可做為介面基底類別。只要使用 Implements 陳述式,任何類別都可以實作其他類別的介面,如下所示。
' Contents of class BaseClass
Public Sub BaseMethod()
End Sub
' Contents of class DerivedClass
Implements BaseClass
Private Sub BaseClass_BaseMethod()
End Sub
雖然類別的個別成員不必包含任何程式碼,但可能有些成員還是這樣做。
Visual Basic 2008
Visual Basic 2008 使類別與介面間有了清楚的區分,一個是在 Class 陳述式中宣告,另一個則是在 Interface 陳述式中宣告。類別無法當做介面。若要當做介面,便必須使用 Interface 來宣告型別。您無法實作介面的成員。事實上根據語法,介面定義中不可以出現像 End Sub 這樣的程式碼行。若要實作介面的成員,您必須在宣告介面的類別中使用 Implements 陳述式:
Interface Printable
Sub Print()
Property Mode() As Integer
End Interface
Public Class Tree
Implements Printable
Private modeValue As Integer
Public Property Mode() As Integer Implements Printable.Mode
Get
Return modeValue
End Get
Set(ByVal Value As Integer)
modeValue = Value
End Set
End Property
Public Sub Print() Implements Printable.Print
' Add code to print a tree.
End Sub
End Class
升級建議
在 Visual Basic 6.0 中實作繼承的唯一方法,便是使用 Implements 陳述式和基底類別。在新版的 Visual Basic 中,有兩種繼承:實作繼承和介面繼承。您應該根據應用程式選取需要的繼承類型。要考慮的問題包括:
使用 Inherits 陳述式的實作繼承可讓您建立新的類別,而不需再撰寫程式碼。您只需要在要修改基底類別行為時加入程式碼。在介面繼承中,您必須為每一個基底類別成員加入程式碼。
如果您想要繼承多個類別,便可以使用介面。雖然 Visual Basic 2008 只支援繼承一個類別,但是一個類別可以支援多個介面。
.NET Framework 定義了數個可簡化常見程式設計工作的介面。範例包括 IComparable、ISerializable 和 IFormattable。
對於許多 .NET Framework 介面而言,.NET Framework 也提供了實作介面的類別。範例之一是實作 IComponent 介面的 Component 類別。只要使用 Inherits 陳述式繼承 Component,類別就可取得 IComponent 介面的所有功能,而不必撰寫任何程式碼。