Interface 陳述式 (Visual Basic)
宣告介面的名稱,並介紹組成介面的成員定義。
語法
[ <attributelist> ] [ accessmodifier ] [ Shadows ] _
Interface name [ ( Of typelist ) ]
[ Inherits interfacenames ]
[ [ modifiers ] Property membername ]
[ [ modifiers ] Function membername ]
[ [ modifiers ] Sub membername ]
[ [ modifiers ] Event membername ]
[ [ modifiers ] Interface membername ]
[ [ modifiers ] Class membername ]
[ [ modifiers ] Structure membername ]
End Interface
組件
詞彙 | 定義 |
---|---|
attributelist |
選擇性。 請參閱屬性清單。 |
accessmodifier |
選擇性。 可以是下列其中一項: - 公開 - Protected - Friend - 私用 - Protected Friend - Private Protected 請參閱 Access levels in Visual Basic。 |
Shadows |
選擇性。 請參閱 Shadows。 |
name |
必要。 此介面的名稱。 請參閱 Declared Element Names。 |
Of |
選擇性。 指定這是泛型介面。 |
typelist |
使用 Of 關鍵字時需要。 此介面的型別參數清單。 您可以選擇性地使用 In 和 Out 泛型修飾詞,將每個型別參數宣告為變數。 請參閱類型清單。 |
Inherits |
選擇性。 表示此介面繼承另一個介面或多個介面的屬性和成員。 請參閱 Inherits 陳述式。 |
interfacenames |
使用 Inherits 陳述式時需要。 此介面從中衍生的介面名稱。 |
modifiers |
選擇性。 所定義介面成員的適當修飾詞。 |
Property |
選擇性。 定義介面的成員屬性。 |
Function |
選擇性。 定義介面的成員 Function 程序。 |
Sub |
選擇性。 定義介面的成員 Sub 程序。 |
Event |
選擇性。 定義介面的成員事件。 |
Interface |
選擇性。 定義巢狀於此介面的介面。 巢狀介面定義必須以 End Interface 陳述式終止。 |
Class |
選擇性。 定義介面的成員類別。 成員類別定義必須以 End Class 陳述式終止。 |
Structure |
選擇性。 定義介面的成員結構。 成員結構定義必須以 End Structure 陳述式終止。 |
membername |
每個定義為介面成員之屬性、程序、事件、介面、類別或結構的必要項。 成員的名稱。 |
End Interface |
終止 Interface 定義。 |
備註
「介面」會定義類別和結構可以實作的一組成員,例如屬性和程序。 介面只會定義成員的簽章,而不會定義其內部運作方式。
類別或結構會為介面所定義的每個成員提供程式碼來實作介面。 最後,當應用程式從該類別或結構建立執行個體時,就會有一個物件存在並執行於記憶體中。 如需詳細資訊,請參閱物件和類別以及介面。
您只能在命名空間或模組層級使用 Interface
。 這表示介面的「宣告內容」必須是來源檔案、命名空間、類別、結構、模組或介面,而且不能是程序或區塊。 如需詳細資訊,請參閱宣告內容和預設存取層級。
介面預設會獲授與 Friend 存取權。 您可使用存取修飾詞來調整其存取層級。 如需詳細資訊,請參閱 Visual Basic 中的存取層級。
規則
巢狀介面。 您可以在另一個介面內定義一個介面。 外部介面稱為「包含介面」,而內部介面稱為「巢狀介面」。
成員宣告。 當您將屬性或程序宣告為介面的成員時,您只會定義該屬性或程序的「簽章」。 這包括元素類型 (屬性或程序)、其參數和參數類型,以及其傳回型別。 因此,成員定義只會使用一行程式碼,而且終止陳述式 (例如
End Function
或End Property
) 在介面中無效。相反地,當您定義列舉或結構或是巢狀類別或介面時,則必須包含其資料成員。
成員修飾詞。 定義模組成員時,您無法使用任何存取修飾詞,您也無法指定 Shared 或任何程序修飾詞 (但 Overloads 除外)。 您可以使用 Shadows 宣告任何成員,並可在定義屬性時使用 Default 以及 ReadOnly 或 WriteOnly。
繼承: 如果介面使用 Inherits 陳述式,您可以指定一或多個基底介面。 即使其皆定義具有相同名稱的成員,您也可以繼承自兩個介面。 如果您這樣做,實作程式碼必須使用名稱限定性條件來指定要實作的成員。
介面無法繼承自具有更嚴格存取層級的另一個介面。 例如,
Public
介面無法繼承自Friend
介面。介面無法繼承自內嵌於本身的介面。
實作。 當類別使用 Implements 陳述式來實作此介面時,必須實作介面內定義的每個成員。 此外,實作程式碼中的每個簽章必須完全符合此介面中定義的對應簽章。 不過,實作程式碼中的成員名稱則不需要符合介面中定義的成員名稱。
當類別實作程序時,無法將程序指定為
Shared
。預設屬性。 介面最多可以指定一個屬性作為其「預設屬性」,不需要使用屬性名稱就能參考此屬性。 您可以使用 Default 修飾詞宣告屬性,來指定這類屬性。
請注意,這表示介面只有在無繼承內容時,才能定義預設屬性。
行為
存取層級。 所有介面成員都會隱含地具有公用存取權。 定義成員時,您無法使用任何存取修飾詞。 不過,實作介面的類別可以宣告每個已實作成員的存取層級。
如果您將類別執行個體指派給變數,其成員的存取層級可能會取決於變數的資料類型是基礎介面還是實作類別。 說明如下例。
Public Interface IDemo Sub DoSomething() End Interface Public Class implementIDemo Implements IDemo Private Sub DoSomething() Implements IDemo.DoSomething End Sub End Class Dim varAsInterface As IDemo = New implementIDemo() Dim varAsClass As implementIDemo = New implementIDemo()
如果您透過
varAsInterface
存取類別成員,則所有成員都具有公用存取權。 不過,如果您透過varAsClass
存取成員,則Sub
程序doSomething
具有私用存取權。[範圍]。 介面含括在其命名空間、類別、結構或模組的範圍內。
每個介面成員的範圍都是整個介面。
存留期。 介面本身沒有存留期,其成員也沒有。 當類別實作介面並建立物件作為該類別的執行個體時,該物件在執行的應用程式內會有存留期。 如需詳細資訊,請參閱 Class 陳述式中的<存留期>。
範例
下列範例會使用 Interface
陳述式來定義名為 thisInterface
的介面,該介面必須使用 Property
陳述式和 Function
陳述式來實作。
Public Interface thisInterface
Property ThisProp(ByVal thisStr As String) As Char
Function ThisFunc(ByVal thisInt As Integer) As Integer
End Interface
請注意,Property
和 Function
陳述式不會在介面內引進以 End Property
和 End Function
結尾的區塊。 介面只會定義其成員的簽章。 完整的 Property
和 Function
區塊會出現在實作 thisInterface
的類別中。