Оператор 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 Необязательный элемент. Может применяться один из перечисленных ниже типов.

- Общественного
- Защищены
- Друг
- Частная
- Защищенный друг
- Закрытый защищенный

См. уровни доступа в Visual Basic.
Shadows Необязательный элемент. См . тени.
name Обязательный. Имя этого интерфейса. См. раздел Declared Element Names.
Of Необязательный элемент. Указывает, что это универсальный интерфейс.
typelist Требуется, если используется ключевое слово Of . Список параметров типа для этого интерфейса. При необходимости каждый параметр типа можно объявить с помощью In и Out универсальных модификаторов. См. список типов.
Inherits Необязательный элемент. Указывает, что этот интерфейс наследует атрибуты и члены другого интерфейса или интерфейсов. См. инструкцию "Наследование".
interfacenames Требуется, если используется инструкция Inherits . Имена интерфейсов, производных от этого интерфейса.
modifiers Необязательный элемент. Соответствующие модификаторы для определяемого члена интерфейса.
Property Необязательный элемент. Определяет свойство, являющееся членом интерфейса.
Function Необязательный элемент. Определяет процедуру Function , которая является членом интерфейса.
Sub Необязательный элемент. Определяет процедуру Sub , которая является членом интерфейса.
Event Необязательный элемент. Определяет событие, являющееся членом интерфейса.
Interface Необязательный элемент. Определяет интерфейс, вложенный в этот интерфейс. Определение вложенного интерфейса должно завершаться оператором End Interface .
Class Необязательный элемент. Определяет класс, который является членом интерфейса. Определение класса-члена должно завершаться оператором End Class .
Structure Необязательный элемент. Определяет структуру, являющуюся членом интерфейса. Определение структуры элемента должно завершаться оператором End Structure .
membername Требуется для каждого свойства, процедуры, события, интерфейса, класса или структуры, определенной как член интерфейса. Имя элемента.
End Interface Interface Завершает определение.

Remarks

Интерфейс определяет набор элементов, таких как свойства и процедуры, которые могут реализовывать классы и структуры. Интерфейс определяет только сигнатуры членов, а не внутренние рабочие элементы.

Класс или структура реализует интерфейс, предоставляя код для каждого члена, определенного интерфейсом. Наконец, когда приложение создает экземпляр из этого класса или структуры, объект существует и выполняется в памяти. Дополнительные сведения см. в разделе "Объекты и классы и интерфейсы".

Можно использовать Interface только на уровне пространства имен или модуля. Это означает, что контекст объявления для интерфейса должен быть исходным файлом, пространством имен, классом, структурой, модулем или интерфейсом и не может быть процедурой или блоком. Дополнительные сведения см. в разделе Контексты объявления и уровни доступа по умолчанию.

Интерфейсы по умолчанию — "Дружественный доступ". Вы можете настроить их уровни доступа с помощью модификаторов доступа. Дополнительные сведения см. в разделе "Уровни доступа" в Visual Basic.

Правила

  • Вложенные интерфейсы. Можно определить один интерфейс в другом. Внешний интерфейс называется содержащим интерфейсом, а внутренний интерфейс называется вложенным интерфейсом.

  • Объявление члена. При объявлении свойства или процедуры как члена интерфейса определяется только сигнатура этого свойства или процедуры. Сюда входят тип элемента (свойство или процедура), его параметры и типы параметров, а также тип возвращаемого значения. Из-за этого определение элемента использует только одну строку кода и завершающие операторы, такие как End Function или End Property недопустимые в интерфейсе.

    Напротив, при определении перечисления или структуры или вложенного класса или интерфейса необходимо включить их члены данных.

  • Модификаторы элементов. При определении членов модуля нельзя использовать модификаторы доступа, а также нельзя указывать модификатор общих или процедур, кроме перегрузки. Можно объявить любой элемент с тенями, и при определении свойства можно использовать default , а также ReadOnly или WriteOnly.

  • Наследования. Если интерфейс использует оператор Inherits, можно указать один или несколько базовых интерфейсов. Можно наследовать от двух интерфейсов, даже если каждый из них определяет член с одинаковым именем. В этом случае реализующий код должен использовать квалификацию имени, чтобы указать, какой член он реализует.

    Интерфейс не может наследоваться от другого интерфейса с более строгим уровнем доступа. Например, Public интерфейс не может наследоваться от Friend интерфейса.

    Интерфейс не может наследоваться от интерфейса, вложенного в него.

  • Реализация. Если класс использует оператор Implements для реализации этого интерфейса, он должен реализовывать каждый член, определенный в интерфейсе. Кроме того, каждая сигнатура в реализуемом коде должна точно соответствовать соответствующей сигнатуре, определенной в этом интерфейсе. Однако имя члена в реализуемом коде не обязательно совпадает с именем члена, как определено в интерфейсе.

    Если класс реализует процедуру, она не может назначить процедуру как Shared.

  • Свойство по умолчанию. Интерфейс может указать не более одного свойства в качестве свойства по умолчанию, на которое можно ссылаться без использования имени свойства. Чтобы указать такое свойство, объявив его модификатором по умолчанию .

    Обратите внимание, что это означает, что интерфейс может определить свойство по умолчанию только в том случае, если он не наследует ни одного свойства.

Поведение

  • Уровень доступа. Все члены интерфейса неявно имеют открытый доступ. При определении элемента нельзя использовать модификатор доступа. Однако класс, реализующий интерфейс, может объявлять уровень доступа для каждого реализованного члена.

    При назначении экземпляра класса переменной уровень доступа его членов может зависеть от того, является ли тип данных переменной базовым интерфейсом или реализующим классом. Это показано в следующем примере.

    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процедура SubdoSomething имеет закрытый доступ.

  • Область. Интерфейс находится в области в пределах своего пространства имен, класса, структуры или модуля.

    Область каждого элемента интерфейса — это весь интерфейс.

  • Время существования. Интерфейс не имеет времени существования, а также его членов. Когда класс реализует интерфейс и создается объект в качестве экземпляра этого класса, объект имеет время существования в приложении, в котором он выполняется. Дополнительные сведения см. в разделе "Время существования" в операторе класса.

Пример

В следующем примере инструкция используется 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.

См. также раздел