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

- Открытый
- Protected
- Friend
- Частное
- Protected Friend
- Private Protected

См. раздел Access levels in Visual Basic.
Shadows Необязательно. См . тени.
name Обязательный. Имя этого интерфейса. См. раздел Declared Element Names.
Of Необязательно. Указывает, что это универсальный интерфейс.
typelist Требуется, если вы используете ключевое слово. Список параметров типа для этого интерфейса. При необходимости каждый параметр типа может быть объявлен вариантом с помощью 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 Завершает определение.

Замечания

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

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

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

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

Правила

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

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

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

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

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

    Интерфейс не может наследоваться от другого интерфейса с более строгим уровнем доступа. Например, 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

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

См. также