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


Полиморфизм на основе интерфейсов

Обновлен: Ноябрь 2007

Интерфейсы — это еще один способ использования полиморфизма в Visual Basic. Интерфейсы описывают свойства и методы так же, как классы, но, в отличие от классов, интерфейсы не содержат их реализацию. Преимущество интерфейсов состоит в том, что они позволяют системам программных компонентов развиваться, не нарушая структуру существующего кода.

Для реализации полиморфизма при помощи интерфейсов нужно по-разному реализовать интерфейс в разных классах. Клиентские приложения могут одинаковым образом использовать старые и новые реализации. Преимуществом полиморфизма, основанного на использовании интерфейсов, является отсутствие необходимости заново компилировать существующие клиентские приложения, чтобы заставить их работать с новыми реализациями интерфейсов.

В следующем примере объявляется интерфейс Shape2, реализуемый классами RightTriangleClass2 и RectangleClass2. Процедура ProcessShape2 вызывает метод CalculateArea экземпляра RightTriangleClass2 или RectangleClass2:

Sub TestInterface()
    Dim RectangleObject2 As New RectangleClass2
    Dim RightTriangleObject2 As New RightTriangleClass2
    ProcessShape2(RightTriangleObject2, 3, 14)
    ProcessShape2(RectangleObject2, 3, 5)
End Sub

Sub ProcessShape2(ByVal Shape2 As Shape2, ByVal X As Double, _
      ByVal Y As Double)
    MsgBox("The area of the object is " _
       & Shape2.CalculateArea(X, Y))
End Sub

Public Interface Shape2
    Function CalculateArea(ByVal X As Double, ByVal Y As Double) As Double
End Interface

Public Class RightTriangleClass2
    Implements Shape2
    Function CalculateArea(ByVal X As Double, _
          ByVal Y As Double) As Double Implements Shape2.CalculateArea
        ' Calculate the area of a right triangle. 
        Return 0.5 * (X * Y)
    End Function
End Class

Public Class RectangleClass2
    Implements Shape2
    Function CalculateArea(ByVal X As Double, _
          ByVal Y As Double) As Double Implements Shape2.CalculateArea
        ' Calculate the area of a rectangle. 
        Return X * Y
    End Function
End Class

См. также

Задачи

Практическое руководство. Создание и реализация интерфейсов

Основные понятия

Полиморфизм на основе наследования