Оператор 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
процедуры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
Обратите внимание, что Function
Property
операторы не вводят блоки, заканчивающиеся и End Property
End Function
в интерфейсе. Интерфейс определяет только подписи своих членов. Полные Property
и Function
блоки отображаются в классе, реализуемом thisInterface
.