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 關鍵字時需要。 此介面的型別參數清單。 您可以選擇性地使用 InOut 泛型修飾詞,將每個型別參數宣告為變數。 請參閱類型清單
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 FunctionEnd Property) 在介面中無效。

    相反地,當您定義列舉或結構或是巢狀類別或介面時,則必須包含其資料成員。

  • 成員修飾詞。 定義模組成員時,您無法使用任何存取修飾詞,您也無法指定 Shared 或任何程序修飾詞 (但 Overloads 除外)。 您可以使用 Shadows 宣告任何成員,並可在定義屬性時使用 Default 以及 ReadOnlyWriteOnly

  • 繼承: 如果介面使用 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

請注意,PropertyFunction 陳述式不會在介面內引進以 End PropertyEnd Function 結尾的區塊。 介面只會定義其成員的簽章。 完整的 PropertyFunction 區塊會出現在實作 thisInterface 的類別中。

另請參閱