Оператор Interface (Visual Basic)

Обновлен: Ноябрь 2007

Объявляет имя интерфейса и представляет определения членов, которые входят в интерфейс.

[ <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
    Обязательный параметр. Имя этого интерфейса. См. раздел Имена объявленных элементов.

  • Of
    Необязательный атрибут. Определяет, что это универсальный интерфейс.

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

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

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

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

  • Property
    Необязательный атрибут. Определяет свойство, которое является членом интерфейса.

  • Function
    Необязательный атрибут. Определяет процедуру Function, которая является членом интерфейса.

  • Sub
    Необязательный атрибут. Определяет процедуру Sub, которая является членом интерфейса.

  • Event
    Необязательный атрибут. Определяет событие, которое является членом интерфейса.

  • Interface
    Необязательный атрибут. Определяет интерфейс, вложенный в данный интерфейс. Определение вложенного интерфейса должен завершать оператор End Interface.

  • Class
    Необязательный атрибут. Определяет класс, который является членом интерфейса. Определение члена класса должен завершать оператор End Class.

  • Structure
    Необязательный атрибут. Определяет структуру, которая является членом интерфейса. Определение члена структуры должен завершать оператор End Structure.

  • membername
    Требуется для каждого свойства, процедуры, события, интерфейса, класса или структуры, определенных как члена интерфейса. Имя члена.

  • End Interface
    Завершает определение Interface.

Заметки

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

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

Сравнение интерфейсов и классов см. в разделе Общие сведения об интерфейсах.

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

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

Правила

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

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

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

  • Модификаторы членов. Нельзя использовать любые модификаторы доступа при определении модуля членов, а также можно указать Shared (Visual Basic) или любую процедуру модификаторов, за исключением Overloads. Можно объявить любой член с Shadows, и можно использовать Default (Visual Basic) при определении свойства, а также ReadOnly (Visual Basic) или WriteOnly.

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

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

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

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

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

  • Свойство по умолчанию. В интерфейсе можно объявить не более одного атрибута по умолчанию, на который можно ссылаться без использования имени атрибута. Можно задать такое свойство, объявив его в модификаторе Default (Visual Basic). Дополнительные сведения см. в разделе Свойства, используемые по умолчанию.

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

Поведение

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

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

    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 имеет защищенный доступ.

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

    Областью действия для каждого члена интерфейса является весь интерфейс.

  • Время жизни. Интерфейс сам не имеет времени жизни, так же как и его члены. Если класс реализует интерфейс и создается объект как экземпляр этого класса, то объект имеет время жизни в приложении, в котором он выполняется. Дополнительные сведения содержатся в разделе "Время жизни" в Оператор Class (Visual Basic).

Пример

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

См. также

Основные понятия

Универсальные типы в Visual Basic

Ссылки

Оператор Class (Visual Basic)

Оператор Module

Инструкция Structure

Оператор Property

Оператор Function (Visual Basic)

Оператор Sub (Visual Basic)

Другие ресурсы

Интерфейсы в Visual Basic