Хорошо, я пытался поиграть с дженериками в vb.net в примере проекта. На данный момент это выглядит так:
У меня есть интерфейс, называемый IRow (и класс, который реализует его как Datarow).
Второй интерфейс - ICanGetByRow, который выглядит следующим образом:
Public Interface ICanGetByRow(Of T)
Function GetByRow(ByVal Row As IRow) As T
End Interface
Функция просто берет IRow и преобразует его в T. Это достаточно просто. Теперь, для более легкого доступа, я хочу реализовать функцию в интерфейсе IRow, которая берет строку и преобразует ее в указанный ICanGetByRow.
Мой интерфейс был улучшен следующей функцией
Function GetObj(Of T As ICanGetByRow(Of T))() As T
Возможно, вы видите проблему. Если бы я реализовал это так:
Public Function GetObj(Of T As ICanGetByRow(Of T))() As T Implements IRow.GetObj
Dim foo As New T
foo.GetByRow(Me)
Return foo
End Function
Мне не позволили бы создать новый T, и когда я попытался заставить его работать, сообщив универсальной функции, что у моего интерфейса есть конструктор, он не позволил мне больше вызывать GetByRow.
Public Function GetObj(Of T As New, ICanGetByRow)() As T Implements IRow.GetObj
Dim foo As New T
foo.GetByRow(Me)
Return foo
End Function
Я думаю, что моя проблема в том, что я понятия не имею, как сказать универсальной функции, что она получит ICanGetByRow (из T), который имеет конструктор, и я, вероятно, делаю это неправильно.