Основы VB.NET Урок 26. Интерфейсы в VB.NET
Интерфейс можно представлять себе как абстрактный класс, в котором есть только объявления методов и свойств (хотя это представление и несколко упрощено). Никаких реализаций в интерфейсе нет. В интерфейсе также не может быть никаких переменных - только свойства.
Мы можем объявить некоторый класс как потомок интерфейса. В этом случае класс должен реализовывать все методы и свойства интерфейса. Собственно говоря, интерфейсы и служат предками для классов (или для других интерфейсов) - в этом их главное предназначение и есть.
Один класс можно объявить как потомок от нескольких интерфейсов одновременно. Т. е. у такого класс будет несколько пап.
Переходим к конкретному примеру:
'Объявление интерфейса
Interface IMyInterface
Function SomeFunc() As String
Sub SomeProc()
Property SomeProp() As Int32
End Interface
'Объявление класса
Class MyNewClass
Implements IMyInterface
Private SomeData As Int32
'Реализация функции интерфейса
Function SomeFunc() As String Implements IMyInterface.SomeFunc
Return "Some string"
End Function
'Реализация процедуры интерфейса
Sub SomeProc() Implements IMyInterface.SomeProc
Console.WriteLine("Some procedure")
End Sub
'Реализация свойства интерфейса
Property SomeProp() As Int32 Implements IMyInterface.SomeProp
Get
Return SomeData
End Get
Set(ByVal Value As Int32)
SomeData = Value
End Set
End Property
End Class
Обсуждение кода. Сначала мы объявляем интерфейс:
Interface IMyInterface
Function SomeFunc() As String
Sub SomeProc()
Property SomeProp() As Int32
End Interface
...
Как вы видите, для этого мы используем ключевое слово Interface. В интерфейсе мы объявляем функцию, процедуру и свойство. Имена интерфейсов принято, кстати, начинать на букву I. Еще раз обратите внимание, что в интерфейсе никакой реализции нет - все будем реализовывать в классе, производном от интерфейса.
Затем мы объявляем класс MyNewClass как потомок интерфейса IMyInterface. Об этом нам говорит строка
Class MyNewClass
Implements IMyInterface
...
Внутри класса мы должны написать реализацию всего того, что мы объявили в интерфейсе. В каждой такой реализации мы должны написать, что именно она из интерфейса реализовывает. Это мы делаем с помощью ключевого слова Implements:
...
Function SomeFunc() As String Implements IMyInterface.SomeFunc
...
End Function
...
Sub SomeProc() Implements IMyInterface.SomeProc
...
End Sub
...
Property SomeProp() As Int32 Implements IMyInterface.SomeProp
...
End Property
Используется такой класс точно также, как и любой другой.
Класс мы пожем объявлять потомком не одного, а нескольких интерфейсов:
Class MyNewClass
Implements IMyInterface1
Implements IMyInterface2
...
End Class
При этом в разных интерфейсах могут быть функции, которые называются одинаково (путаницы не будет, так как имя функции мы пишем после точки, следующей за именем интерфейса). Это верно, разумеется, и для свойств и процедур.
Если наш класс есть потомок некоторого интерфейса, то он должен реализовывать все функции, процедуры и свойства этого интерфейса.
|