介面 (Visual Basic)
「介面」(Interface) 定義類別可實作的屬性、方法和事件。介面允許您將功能定義為密切相關的屬性、方法和事件的小群組;這能夠減少相容性的問題發生,因為您能夠為您的介面開發增強實作,而不會危及現有的程式碼。只要開發額外的介面及實作,您就可以隨時加入新的功能。
您可能想使用介面而非類別繼承的原因還有:
在您的應用程式需有許多可能不相關的物件型別來提供特定功能的情況下,介面是較適合的做法。
介面比基底類別更具彈性,因為您能夠定義可實作多個介面的單一實作。
在不必從基底類別繼承實作的情況下,較適合使用介面。
在無法使用類別繼承的情況下,介面是相當有用的。例如,結構無法自類別繼承,但可以實作介面。
宣告介面
介面定義是置於 Interface 和 End Interface 陳述式之間。跟隨在 Interface 陳述式之後,您可以加入選擇性的 Inherits 陳述式,列出一或多個繼承的介面。Inherits 陳述式必須在宣告中所有其他陳述式之前,註解除外。介面定義中的其餘陳述式應是 Event、Sub、Function、Property、Interface、Class、Structure 和 Enum 陳述式。介面不能包含任何實作程式碼或與實作程式碼相關的陳述式,例如 End Sub 或 End Property。
在命名空間中,介面陳述式預設值為 Friend,但也可以明確宣告為 Public 或 Friend。定義於類別、模組、介面和結構內的介面,預設值為 Public,但也可以明確宣告為 Public、Friend、Protected 或 Private。
注意事項 |
---|
Shadows 關鍵字可以套用至所有介面成員。Overloads 關鍵字可以套用至介面定義中宣告的 Sub、Function 和 Property 陳述式。此外,Property 陳述式可以含有 Default、ReadOnly 或 WriteOnly 修飾詞 (Modifier)。至於其他的修飾詞都是不允許的:Public、Private、Friend、Protected、Shared、Overrides、MustOverride 或 Overridable。如需詳細資訊,請參閱宣告內容和預設存取層級 (Visual Basic)。 |
例如,下列程式碼定義含有一個函式、一個屬性和一個事件的介面。
Interface IAsset
Event ComittedChange(ByVal Success As Boolean)
Property Division() As String
Function GetID() As Integer
End Interface
實作介面
Visual Basic 保留字 Implements 可以兩種方式來使用。Implements 陳述式表示由類別或結構實作的介面。Implements 關鍵字表示由類別成員或結構成員實作的特定介面成員。
Implements Statement
如果類別或結構會實作一個或多個介面,則必須在 Class 或 Structure 陳述式後面,立即加入 Implements 陳述式。Implements 陳述式需要介面的逗號分隔清單,該介面是由類別來實作。類別或結構必須使用 Implements 關鍵字來實作所有介面成員。
Implements 關鍵字
Implements 關鍵字需要所實作介面成員的逗號分隔清單。一般只指定一個介面成員,但您可以指定多個成員。介面成員的規格是由介面名稱 (必須在類別中的實作陳述式內指定)、句號,以及要實作的成員函式、屬性或事件名稱所組成。實作介面成員的成員名稱可使用任何合法的識別項,而且不限於 Visual Basic 之前版本所使用的 InterfaceName_MethodName 規格。
例如,下列程式碼顯示如何宣告可實作介面方法的 Sub1 副程式:
Class Class1
Implements interfaceclass.interface2
Sub Sub1(ByVal i As Integer) Implements interfaceclass.interface2.Sub1
End Sub
End Class
實作成員的參數型別和傳回型別 (Return Type) 必須與介面中的介面屬性 (Property) 或成員宣告相符。實作介面項目最常見的方式是使用名稱與介面相同的成員,如以上範例所示。
若要宣告介面方法的實作,您可以使用任何執行個體 (Instance) 方法宣告的合法屬性 (Attribute),包括 Overloads、Overrides、Overridable、Public、Private、Protected、Friend、Protected Friend、MustOverride、Default 和 Static。Shared 屬性不是合法的,因為它定義類別而非執行個體方法。
您也可以使用 Implements 來寫入單一方法,該方法會實作於介面中定義的多個方法,如下列範例所示:
Class Class2
Implements I1, I2
Protected Sub M1() Implements I1.M1, I1.M2, I2.M3, I2.M4
End Sub
End Class
您可以使用私用成員來實作介面成員。當私用成員實作介面的成員時,雖然這個成員無法直接在類別的物件變數取得,但可經由介面取得。
介面實作範例
實作介面的類別必須實作介面所有的屬性、方法和事件。
以下範例定義兩介面。第二個介面 Interface2 會繼承 Interface1,並定義額外的屬性和方法。
Interface Interface1
Sub sub1(ByVal i As Integer)
End Interface
' Demonstrates interface inheritance.
Interface Interface2
Inherits Interface1
Sub M1(ByVal y As Integer)
ReadOnly Property Num() As Integer
End Interface
接下來的範例實作上一個範例中所定義的介面 Interface1:
Public Class ImplementationClass1
Implements Interface1
Sub Sub1(ByVal i As Integer) Implements Interface1.sub1
' Insert code here to implement this method.
End Sub
End Class
最後一個範例實作 Interface2,包括繼承自 Interface1 的方法:
Public Class ImplementationClass2
Implements Interface2
Dim INum As Integer = 0
Sub sub1(ByVal i As Integer) Implements Interface2.sub1
' Insert code here that implements this method.
End Sub
Sub M1(ByVal x As Integer) Implements Interface2.M1
' Insert code here to implement this method.
End Sub
ReadOnly Property Num() As Integer Implements Interface2.Num
Get
Num = INum
End Get
End Property
End Class
相關主題
標題 |
描述 |
---|---|
提供詳細程序,引導您定義和實作您自己介面的處理序。 |
|
討論泛型介面中的共變數和 Contravariance,並提供 .NET Framework 中的 Variant 泛型介面清單。 |