Оператор 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.
См. также
Ссылки
Оператор Function (Visual Basic)
In (универсальный модификатор) (Visual Basic)
Out (универсальный модификатор) (Visual Basic)
Основные понятия
Универсальные типы в Visual Basic (Visual Basic)
Вариативность в универсальных интерфейсах (C# и Visual Basic)