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 In Out 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
lubEnd 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 interfejsuFriend
.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
varAsInterface
programu , wszystkie te elementy mają dostęp publiczny. Jeśli jednak uzyskujesz dostęp do członków za pośrednictwemvarAsClass
metody ,Sub
proceduradoSomething
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 thisInterface
element .