共用方式為


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 選擇性。 可以是下列其中一項:

- 公共
- 保護
- 朋友
- 私人
- 受保護的Friend
- 私人受保護

請參閱 Access levels in Visual Basic
Shadows 選擇性。 請參閱 Shadows
name 必須的。 這個介面的名稱。 請參閱 宣告的項目名稱
Of 選擇性。 指定這是泛型介面。
typelist 如果您使用 Of 關鍵詞,則為必要項。 這個介面的類型參數清單。 或者,每個類型參數都可以使用 InOut 泛型修飾詞來宣告 Variant。 請參閱類型清單
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 或任何程式修飾詞,但多 除外。 您可以使用 Shadows 宣告任何成員,而且您可以在定義屬性以及 ReadOnly 或 WriteOnly 時使用 Default

  • 繼承: 如果介面使用 Inherits 語句,您可以指定一或多個基底介面。 即使它們各自定義具有相同名稱的成員,您仍可繼承自兩個介面。 如果您這樣做,實作程式代碼必須使用名稱限定性來指定它正在實作的成員。

    介面無法繼承自具有更嚴格的存取層級的另一個介面。 例如, Public 介面無法繼承自 Friend 介面。

    介面無法繼承自其內巢狀介面。

  • 實作。 當類別使用 Implements 語句來實作這個介面時,它必須實作介面內定義的每個成員。 此外,實作程式代碼中的每個簽章必須完全符合這個介面中定義的對應簽章。 不過,實作程式代碼中成員的名稱不必符合介面中所定義的成員名稱。

    當類別實作程式時,它無法將程式指定為 Shared

  • Default 屬性。 介面最多可以指定一個屬性做為其 預設屬性,而不需要使用屬性名稱即可參考該屬性。 您可以使用 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的介面,這個介面必須使用 語句和 語句來FunctionProperty作。

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類別中。

另請參閱