Основы VB.NET Урок 48. Интерфейс как тип данных
Интерфейсы, которые мы рассмотрели на уроке 26, могут выступать как тип данных. Например, у нас может быть некоторая функция, которая принимает параметр имеющий тип некоторого интерфейса. При вызове такой функции мы подставляем в качестве параметра экзампляр конкретного класса, причем этот класс должен быть потомком нашего интерфейса.
Вот пример:
Imports System
'Объявляем интерфейс IPrint.
Interface IPrint
Sub print()
End Interface
'Класс A - потомок интерфейса IPrint.
Class A
Implements IPrint
Private num As Int32
'Конструктор класса.
Public Sub New(ByVal num As Int32)
Me.num = num
End Sub
'Реализуем метод интерфейса.
Public Sub print() Implements IPrint.print
Console.WriteLine("num={0}", num)
End Sub
End Class
'Класс B - потомок интерфейса IPrint.
Class B
Implements IPrint
Private count As Int32
Private name As String
'Конструктор класса.
Public Sub New(ByVal count As Int32, ByVal name As String)
Me.count = count
Me.name = name
End Sub
'Реализуем метод интерфейса.
Public Sub print() Implements IPrint.print
Console.WriteLine("count={0}, name = {1}", count, name)
End Sub
End Class
'Класс для тестирования.
Class test
'Переменные классов A и B.
Public Shared a1 As New A(12)
Public Shared b1 As New B(20, "Ivan")
'Метод с параметром типа IPrint.
Shared Sub f(ByVal s As IPrint)
s.print()
End Sub
Shared Sub Main()
'Вызов метода с параметрами.
f(a1)
f(b1)
End Sub
End Class
Как вы видите, тут у нас два класса - A и B являются потомками интерфейса IPrint. Естественно, что в каждом из них мы реализуем метод print этого интерфейса. Далее у нас в классе test есть метод f, принимающий в качестве параметра интерфейс IPrint. Это значит, что в качестве реального параметра для f мы можем подставить экземпляр любого класса - потомка IPrint, что мы и делаем далее. Внутри f вызовется реализация метода print для конкретного класса. Так, например, для нашего примера на консоль выведутся строки num = 12 и count = 20, name = Ivan.
|