Оператор 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 Необязательный элемент. См. раздел Shadows.
name Обязательный. Имя этого интерфейса. См. раздел Declared Element Names.
Of Необязательный элемент. Указывает, что это универсальный интерфейс.
typelist Требуется, если используется ключевое слово of . Список параметров типа для этого интерфейса. При необходимости каждый параметр типа можно объявить как Variant с помощью In модификаторов и Out . См. список типов.
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 Function или End Property , недопустимы в интерфейсе.

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

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

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

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

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

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

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

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

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

Поведение

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

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

    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 все они имеют общий доступ. Однако при доступе к членам с помощью varAsClassSub процедура 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

Обратите внимание, что Property инструкции и Function не представляют блоки, которые заканчиваются End Property и End Function находятся внутри интерфейса. Интерфейс определяет только сигнатуры его членов. Полные Property блоки и Function появятся в классе, реализующем интерфейс thisInterface .

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