Оператор 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 |
Необязательный элемент. См . тени. |
name |
Обязательный. Имя этого интерфейса. См. раздел Declared Element Names. |
Of |
Необязательный элемент. Указывает, что это универсальный интерфейс. |
typelist |
Требуется, если используется ключевое слово Of . Список параметров типа для этого интерфейса. При необходимости каждый параметр типа можно объявить с помощью 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 Завершает определение. |
Remarks
Интерфейс определяет набор элементов, таких как свойства и процедуры, которые могут реализовывать классы и структуры. Интерфейс определяет только сигнатуры членов, а не внутренние рабочие элементы.
Класс или структура реализует интерфейс, предоставляя код для каждого члена, определенного интерфейсом. Наконец, когда приложение создает экземпляр из этого класса или структуры, объект существует и выполняется в памяти. Дополнительные сведения см. в разделе "Объекты и классы и интерфейсы".
Можно использовать Interface
только на уровне пространства имен или модуля. Это означает, что контекст объявления для интерфейса должен быть исходным файлом, пространством имен, классом, структурой, модулем или интерфейсом и не может быть процедурой или блоком. Дополнительные сведения см. в разделе Контексты объявления и уровни доступа по умолчанию.
Интерфейсы по умолчанию — "Дружественный доступ". Вы можете настроить их уровни доступа с помощью модификаторов доступа. Дополнительные сведения см. в разделе "Уровни доступа" в Visual Basic.
Правила
Вложенные интерфейсы. Можно определить один интерфейс в другом. Внешний интерфейс называется содержащим интерфейсом, а внутренний интерфейс называется вложенным интерфейсом.
Объявление члена. При объявлении свойства или процедуры как члена интерфейса определяется только сигнатура этого свойства или процедуры. Сюда входят тип элемента (свойство или процедура), его параметры и типы параметров, а также тип возвращаемого значения. Из-за этого определение элемента использует только одну строку кода и завершающие операторы, такие как
End Function
илиEnd Property
недопустимые в интерфейсе.Напротив, при определении перечисления или структуры или вложенного класса или интерфейса необходимо включить их члены данных.
Модификаторы элементов. При определении членов модуля нельзя использовать модификаторы доступа, а также нельзя указывать модификатор общих или процедур, кроме перегрузки. Можно объявить любой элемент с тенями, и при определении свойства можно использовать default , а также ReadOnly или WriteOnly.
Наследования. Если интерфейс использует оператор Inherits, можно указать один или несколько базовых интерфейсов. Можно наследовать от двух интерфейсов, даже если каждый из них определяет член с одинаковым именем. В этом случае реализующий код должен использовать квалификацию имени, чтобы указать, какой член он реализует.
Интерфейс не может наследоваться от другого интерфейса с более строгим уровнем доступа. Например,
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
процедураSub
doSomething
имеет закрытый доступ.Область. Интерфейс находится в области в пределах своего пространства имен, класса, структуры или модуля.
Область каждого элемента интерфейса — это весь интерфейс.
Время существования. Интерфейс не имеет времени существования, а также его членов. Когда класс реализует интерфейс и создается объект в качестве экземпляра этого класса, объект имеет время существования в приложении, в котором он выполняется. Дополнительные сведения см. в разделе "Время существования" в операторе класса.
Пример
В следующем примере инструкция используется 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
.