Интерфейсы (Visual Basic)
Интерфейсы определяют свойства, методы и события, которые классы могут реализовывать. Интерфейсы позволяют определить внешние представления в виде небольших групп тесно связанных свойств, методов и событий; при этом уменьшается количество проблем совместимости, поскольку. можно создавать усовершенствованные реализации интерфейсов без вмешательства в существующий код. Новые внешние представления добавляются в любой момент времени с помощью разработки дополнительных интерфейсов и реализаций.
Имеется еще несколько других причин, по которым использование интерфейсов предпочтительнее использования наследования класса.
Интерфейсы более удобны в тех случаях, когда приложениям требуется большое количество возможно несвязанных типов объектов для предоставления определенных функциональных возможностей.
Интерфейсы более гибки по сравнению с базовыми классами из-за возможности определения одной реализации, способной реализовать несколько интерфейсов.
Интерфейсы предпочтительнее в случаях, когда нет необходимости в наследовании реализации из базовых классов.
Интерфейсы полезны в случаях, когда невозможно использовать наследование класса. Например, структуры не способны наследовать у классов, но способны реализовать интерфейсы.
Объявление интерфейсов
Определения интерфейсов находятся между операторами Interface и End Interface. После оператора Interface можно добавить необязательный оператор Inherits, в котором представлен один или несколько наследуемых интерфейсов. Оператор Inherits предшествуют всем другим операторам в объявлении за исключением комментариев. Остальные операторы в определении интерфейса должны быть следующими: Event, Sub, Function, Property, Interface, Class, Structure и Enum. В интерфейсах не содержатся коды реализаций или операторы, связанные с кодом реализации, такие как End Sub или End Property.
В пространстве имен операторы интерфейса по умолчанию Friend, но также их можно явно объявить как Public или Friend. Интерфейсы, определенные в классах, модули, интерфейсы и структуры являются Public по умолчанию, но также их можно объявить явно как Public, Friend Protected или Private.
Примечание
Ключевое слово Shadows может быть применено для всех членов интерфейса.Ключевое слово Overloads может быть применено к операторам Sub, Function и Property, объявленным в определении интерфейса.Кроме того, для операторов Property можно использовать модификаторы Default, ReadOnly или WriteOnly.Ни один из других модификаторов — Public, Private Friend, Protected, Shared, Overrides, MustOverride или Overridable не разрешен.Дополнительные сведения см. в разделе Контексты объявления и уровни доступа по умолчанию (Visual Basic).
Например, следующий код определяет интерфейс с одной функцией, одним свойством и одним событием.
Interface IAsset
Event ComittedChange(ByVal Success As Boolean)
Property Division() As String
Function GetID() As Integer
End Interface
Реализация интерфейсов
Зарезервированное слово Visual Basic Implements используется двумя способами. Инструкция Implements означает, что класс или структура реализуют интерфейс. Ключевое слово Implements обозначает, что элемент класса или структуры реализует элемент интерфейса.
Оператор Implements
Если класс или структура реализуют один или несколько интерфейсов, он должно включать инструкцию Implements сразу после инструкции Class или Structure. Инструкция Implements требует разделенный запятыми список интерфейсов, внедряемый с помощью класса. Класс или структура должны реализовать все элементы интерфейса с помощью ключевого слова Implements.
Ключевое слово Implements
Ключевое слово Implements требует разделенный запятыми список элементов интерфейса для внедрения. Как правило, указывается только один элемент интерфейса, но можно указать и несколько элементов. Спецификация элемента интерфейса обязательно состоит из имени интерфейса, которое должно быть указано в операторе implements внутри класса, точки и имени реализуемой функции, свойства или события элемента. Для имени элемента класса, который реализует элемент интерфейса, можно использовать любой допустимый идентификатор, не ограничиваясь требованием InterfaceName_MethodName, как это было в более ранних версиях Visual Basic.
Например следующий код показывает способ объявления подпрограммы с именем Sub1, которая реализует метод интерфейса:
Class Class1
Implements interfaceclass.interface2
Sub Sub1(ByVal i As Integer) Implements interfaceclass.interface2.Sub1
End Sub
End Class
Необходимо, чтобы типы параметров и возвращаемые типы элемента реализации соответствовали свойствам интерфейса или объявлению элементов в интерфейсе. Обычным способом реализации элемента интерфейса является способ с использованием элемента, имя которого совпадает с именем интерфейса (см. предыдущий пример).
Для объявления реализации метода интерфейса можно использовать любые допустимые атрибуты в объявлении метода экземпляра, включая Overloads, Overrides, Overridable, Public, Private, Protected, Friend, Protected Friend, MustOverride, Default и Static. Атрибут Shared не является допустимым, поскольку он определяет класс, а не метод экземпляра.
С помощью Implements можно также задать единственный метод, который реализует несколько методов, определенных в интерфейсе, как в следующем примере:
Class Class2
Implements I1, I2
Protected Sub M1() Implements I1.M1, I1.M2, I2.M3, I2.M4
End Sub
End Class
Можно использовать закрытый элемент для реализации элемента интерфейса. Если закрытый элемент реализует элемент интерфейса, он становится доступен через интерфейс, даже если он не доступен непосредственно через переменные класса.
Примеры реализации интерфейса
Необходимо, чтобы классы, реализующие интерфейс, реализовывали и все его свойства, методы и события.
В следующем примере определяются два интерфейса. Второй интерфейс, Interface2, наследует Interface1 и определяет дополнительное свойство и метод.
Interface Interface1
Sub sub1(ByVal i As Integer)
End Interface
' Demonstrates interface inheritance.
Interface Interface2
Inherits Interface1
Sub M1(ByVal y As Integer)
ReadOnly Property Num() As Integer
End Interface
В следующем примере реализуется интерфейс Interface1, определенный в предыдущем примере:
Public Class ImplementationClass1
Implements Interface1
Sub Sub1(ByVal i As Integer) Implements Interface1.sub1
' Insert code here to implement this method.
End Sub
End Class
В последнем примере реализуется Interface2, включающий метод, унаследованный от Interface1:
Public Class ImplementationClass2
Implements Interface2
Dim INum As Integer = 0
Sub sub1(ByVal i As Integer) Implements Interface2.sub1
' Insert code here that implements this method.
End Sub
Sub M1(ByVal x As Integer) Implements Interface2.M1
' Insert code here to implement this method.
End Sub
ReadOnly Property Num() As Integer Implements Interface2.Num
Get
Num = INum
End Get
End Property
End Class
Связанные разделы
Название |
Описание |
---|---|
Пошаговое руководство. Создание и реализация интерфейсов (Visual Basic) |
Содержит подробное описание процедуры определения и реализации пользовательского интерфейса. |
Вариативность в универсальных интерфейсах (C# и Visual Basic) |
Описание использования ковариации и контравариации в универсальных интерфейсах и приведение списка вариативных универсальных интерфейсов в платформе .NET Framework. |