Interface — Instrukcja (Visual Basic)

Deklaruje nazwę interfejsu i wprowadza definicje elementów członkowskich, z których składa się interfejs.

Składnia

[ <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  

generatora

Termin Definicja
attributelist Opcjonalny. Zobacz Lista atrybutów.
accessmodifier Opcjonalny. Może być jednym z następujących elementów:

- Public
- Protected
- Friend
- Private
- Protected Friend
- Private Protected

Zobacz Poziomy dostępu w Visual Basic.
Shadows Opcjonalny. Zobacz Cienie.
name Wymagany. Nazwa tego interfejsu. Zobacz Nazwy zadeklarowanych elementów.
Of Opcjonalny. Określa, że jest to interfejs ogólny.
typelist Wymagane, jeśli używasz słowa kluczowego Of . Lista parametrów typu dla tego interfejsu. Opcjonalnie każdy parametr typu może być zadeklarowany jako wariant przy użyciu i InOut modyfikatorów ogólnych. Zobacz Typ listy.
Inherits Opcjonalny. Wskazuje, że ten interfejs dziedziczy atrybuty i elementy członkowskie innego interfejsu lub interfejsu. Zobacz Dziedziczy instrukcję.
interfacenames Wymagane, jeśli używasz instrukcji Inherits . Nazwy interfejsów, z których pochodzi ten interfejs.
modifiers Opcjonalny. Odpowiednie modyfikatory dla zdefiniowanego elementu członkowskiego interfejsu.
Property Opcjonalny. Definiuje właściwość, która jest elementem członkowskim interfejsu.
Function Opcjonalny. Definiuje procedurę Function , która jest elementem członkowskim interfejsu.
Sub Opcjonalny. Definiuje procedurę Sub , która jest elementem członkowskim interfejsu.
Event Opcjonalny. Definiuje zdarzenie, które jest elementem członkowskim interfejsu.
Interface Opcjonalny. Definiuje interfejs, który jest zagnieżdżony w tym interfejsie. Definicja zagnieżdżonego interfejsu musi zakończyć się instrukcją End Interface .
Class Opcjonalny. Definiuje klasę, która jest elementem członkowskim interfejsu. Definicja klasy składowej musi zakończyć się instrukcją End Class .
Structure Opcjonalny. Definiuje strukturę, która jest elementem członkowskim interfejsu. Definicja struktury składowej musi kończyć się instrukcją End Structure .
membername Wymagane dla każdej właściwości, procedury, zdarzenia, interfejsu, klasy lub struktury zdefiniowanej jako element członkowski interfejsu. Nazwa elementu członkowskiego.
End Interface Kończy definicję Interface .

Uwagi

Interfejs definiuje zestaw elementów członkowskich, takich jak właściwości i procedury, które mogą implementować klasy i struktury. Interfejs definiuje tylko podpisy elementów członkowskich, a nie ich wewnętrzne działanie.

Klasa lub struktura implementuje interfejs, podając kod dla każdego elementu członkowskiego zdefiniowanego przez interfejs. Na koniec, gdy aplikacja tworzy wystąpienie z tej klasy lub struktury, obiekt istnieje i działa w pamięci. Aby uzyskać więcej informacji, zobacz Objects and Classes and Interfaces (Obiekty i klasy i interfejsy).

Można używać Interface tylko na poziomie przestrzeni nazw lub modułu. Oznacza to, że kontekst deklaracji interfejsu musi być plikiem źródłowym, przestrzenią nazw, klasą, strukturą, modułem lub interfejsem i nie może być procedurą ani blokiem. Aby uzyskać więcej informacji, zobacz Konteksty deklaracji i Domyślne poziomy dostępu.

Interfejsy domyślnie mają dostęp znajomy . Możesz dostosować ich poziomy dostępu za pomocą modyfikatorów dostępu. Aby uzyskać więcej informacji, zobacz Poziomy dostępu w Visual Basic.

Reguły

  • Zagnieżdżanie interfejsów. Można zdefiniować jeden interfejs w innym. Interfejs zewnętrzny jest nazywany interfejsem zawierającym, a interfejs wewnętrzny jest nazywany zagnieżdżonym interfejsem.

  • Deklaracja elementu członkowskiego. Podczas deklarowania właściwości lub procedury jako elementu członkowskiego interfejsu definiujesz tylko podpis tej właściwości lub procedury. Obejmuje to typ elementu (właściwość lub procedura), jego parametry i typy parametrów oraz typ zwracany. W związku z tym definicja elementu członkowskiego używa tylko jednego wiersza kodu, a instrukcje zakończenia, takie jak End Function lub End Property nie są prawidłowe w interfejsie.

    Natomiast podczas definiowania wyliczenia lub struktury albo zagnieżdżonej klasy lub interfejsu należy uwzględnić ich składowe danych.

  • Modyfikatory składowych. Nie można używać żadnych modyfikatorów dostępu podczas definiowania elementów członkowskich modułu ani nie można określić modyfikatora współużytkowanego ani żadnej procedury z wyjątkiem przeciążeń. Możesz zadeklarować dowolny element członkowski z cieniami i użyć opcji Domyślne podczas definiowania właściwości, a także funkcji ReadOnly lub WriteOnly.

  • Dziedziczenia. Jeśli interfejs używa instrukcji Inherits, można określić jeden lub więcej interfejsów podstawowych. Można dziedziczyć z dwóch interfejsów, nawet jeśli każdy z nich definiuje element członkowski o tej samej nazwie. Jeśli to zrobisz, kod implementowania musi używać kwalifikacji nazwy, aby określić, który element członkowski implementuje.

    Interfejs nie może dziedziczyć z innego interfejsu z bardziej restrykcyjnym poziomem dostępu. Na przykład Public interfejs nie może dziedziczyć z interfejsu Friend .

    Interfejs nie może dziedziczyć z interfejsu zagnieżdżonego w nim.

  • Implementacji. Gdy klasa używa instrukcji Implements do implementowania tego interfejsu, musi zaimplementować każdy element członkowski zdefiniowany w interfejsie. Ponadto każdy podpis w kodzie implementowania musi dokładnie odpowiadać odpowiedniemu podpisowi zdefiniowanemu w tym interfejsie. Jednak nazwa elementu członkowskiego w kodzie implementowania nie musi być zgodna z nazwą elementu członkowskiego zdefiniowaną w interfejsie.

    Gdy klasa implementuje procedurę, nie może wyznaczyć procedury jako Shared.

  • Właściwość domyślna. Interfejs może określić co najwyżej jedną właściwość jako właściwość domyślną, do której można się odwołać bez użycia nazwy właściwości. Taką właściwość należy określić, deklarując ją za pomocą modyfikatora domyślnego.

    Zauważ, że oznacza to, że interfejs może zdefiniować właściwość domyślną tylko wtedy, gdy dziedziczy żaden.

Zachowanie

  • Poziom dostępu. Wszystkie elementy członkowskie interfejsu niejawnie mają dostęp publiczny . Nie można użyć żadnego modyfikatora dostępu podczas definiowania elementu członkowskiego. Jednak klasa implementowania interfejsu może zadeklarować poziom dostępu dla każdego zaimplementowanego elementu członkowskiego.

    Jeśli przypiszesz wystąpienie klasy do zmiennej, poziom dostępu jej składowych może zależeć od tego, czy typ danych zmiennej jest interfejsem bazowym, czy klasą implementowania. Ilustruje to poniższy przykład.

    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()
    

    Jeśli uzyskujesz dostęp do składowych klas za pośrednictwem varAsInterfaceprogramu , wszystkie te elementy mają dostęp publiczny. Jeśli jednak uzyskujesz dostęp do członków za pośrednictwem varAsClassmetody , Sub procedura doSomething ma dostęp prywatny.

  • Zakres. Interfejs jest w zakresie w całej przestrzeni nazw, klasie, strukturze lub module.

    Zakres każdego elementu członkowskiego interfejsu to cały interfejs.

  • Okres istnienia. Interfejs nie ma okresu istnienia ani jego elementów członkowskich. Gdy klasa implementuje interfejs i obiekt jest tworzony jako wystąpienie tej klasy, obiekt ma okres istnienia w aplikacji, w której jest uruchomiona. Aby uzyskać więcej informacji, zobacz "Lifetime" in Class Statement (Wyrażenie klasy).

Przykład

W poniższym przykładzie użyto instrukcji Interface , aby zdefiniować interfejs o nazwie thisInterface, który musi zostać zaimplementowany za pomocą Property instrukcji i instrukcji Function .

Public Interface thisInterface
    Property ThisProp(ByVal thisStr As String) As Char
    Function ThisFunc(ByVal thisInt As Integer) As Integer
End Interface

Należy pamiętać, że Property instrukcje i Function nie wprowadzają bloków kończących się na End Property i End Function w interfejsie. Interfejs definiuje tylko podpisy swoich elementów członkowskich. Property Pełne bloki są Function wyświetlane w klasie implementujące thisInterfaceelement .

Zobacz też