Основы VB.NET Урок 57. Использование констрейнтов в generic
Часто при объявлении generic на формальный тип необходимо наложить некоторые ограничения. Например, в нем должны быть некоторые методы. В этом случае мы можем указать, что он является потомком некоторого класса или интерфейса. Вот пример синтаксиса такой конструкции и способ ее использования:
'Некоторый интерфейс.
Public Interface ISomeObject
Function SomeMethod0() As Integer
Function SomeMethod1(ByVal A As Integer) As Boolean
End Interface
' Класс, реализующий интерфейс IMyInterface.
Public Class SomeObject
Implements ISomeObject
Function SomeMethod0() As Integer Implements ISomeObject.SomeMethod0
Console.WriteLine("SomeMethod0 of class SomeObject")
End Function
Function SomeMethod1(ByVal A As Integer) As Boolean Implements ISomeObject.SomeMethod1
Console.WriteLine("SomeMethod1 of class SomeObject")
Return (A = 0)
End Function
End Class
' Generic-класс.
Public Class GenericClass(Of T As ISomeObject)
Public Sub MyFunction(ByVal a As T)
a.SomeMethod0()
a.SomeMethod1(2)
End Sub
Public a As Integer
End Class
Как вы видите, у нас есть интерфейс ISomeObject и класс SomeObject, реализующий этот интерфейс. Внутри класса 2 метода интерфейса выводят на консоль в числе прочего свои имена. Так же у нас есть generic-класс GenericClass, в объявлении которого мы указали, что его формальный параметр T должен релизовывать наш интерфейс ISomeObject. Т. е. мы можем при объявлении экземпляра класса подставить вместо его формального параметра класс SomeObject (так как он реализует этот интерфейс).
А вот так мы можем использовать наш generic-класс в методе Main:
Module Module1
Sub Main()
Dim so As New SomeObject
' Создание экземпляра generic-класса.
Dim z As New GenericClass(Of SomeObject)
' Вызов метода generic-класса.
z.MyFunction(so)
End Sub
End Module
Выведется на консоль, естественно, 2 строки - "SomeMethod0 of class SomeObject" и "SomeMethod1 of class SomeObject".
|