Поделиться через


Оператор 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

Обязательный. Имя этого интерфейса. См. раздел Имена объявленных типов (Visual Basic).

Of

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

typelist

Является обязательным, если используется ключевое слово Предложение Of (Visual Basic). Список типов параметров для данного интерфейса. При желании каждый параметр типа можно объявить как вариант с помощью универсальных модификаторов 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.

Заметки

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

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

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

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

Правила

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

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

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

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

  • Наследование. Если интерфейс использует Инструкция 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, процедура Sub doSomething имеет защищенный доступ.

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

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

  • Время существования. Интерфейс сам не имеет времени жизни, так же как и его члены. Если класс реализует интерфейс и создается объект как экземпляр этого класса, то объект имеет время жизни в приложении, в котором он выполняется. Дополнительные сведения содержатся в разделе "Время жизни" в Оператор 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.

См. также

Ссылки

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

Оператор Module

Оператор Structure

Оператор Property

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

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

In (универсальный модификатор) (Visual Basic)

Out (универсальный модификатор) (Visual Basic)

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

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

Вариативность в универсальных интерфейсах (C# и Visual Basic)

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

Интерфейсы (Visual Basic)