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


Интерфейсы (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, FriendProtected или Private.

ПримечаниеПримечание

Ключевое слово Shadows может быть применено для всех членов интерфейса.Ключевое слово Overloads может быть применено к операторам Sub, Function и Property, объявленным в определении интерфейса.Кроме того, для операторов Property можно использовать модификаторы Default, ReadOnly или WriteOnly.Ни один из других модификаторов — Public, PrivateFriend, 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 обозначает, что элемент класса или структуры реализует элемент интерфейса.

28e2e18x.collapse_all(ru-ru,VS.110).gifОператор Implements

Если класс или структура реализуют один или несколько интерфейсов, он должно включать инструкцию Implements сразу после инструкции Class или Structure.Инструкция Implements требует разделенный запятыми список интерфейсов, внедряемый с помощью класса.Класс или структура должны реализовать все элементы интерфейса с помощью ключевого слова Implements.

28e2e18x.collapse_all(ru-ru,VS.110).gifКлючевое слово 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

Можно использовать закрытый элемент для реализации элемента интерфейса.Если закрытый элемент реализует элемент интерфейса, он становится доступен через интерфейс, даже если он не доступен непосредственно через переменные класса.

28e2e18x.collapse_all(ru-ru,VS.110).gifПримеры реализации интерфейса

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

В следующем примере определяются два интерфейса.Второй интерфейс, 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.