告诉泛型函数它将使用vb.net中带有构造函数的接口
好的,我一直在尝试在一个示例项目中玩弄vb.net中的泛型。目前,情况是这样的: 我有一个名为IRow的接口(以及一个将其实现为Datarow的类) 第二个接口是ICanGetByRow,如下所示:告诉泛型函数它将使用vb.net中带有构造函数的接口,vb.net,generics,interface,Vb.net,Generics,Interface,好的,我一直在尝试在一个示例项目中玩弄vb.net中的泛型。目前,情况是这样的: 我有一个名为IRow的接口(以及一个将其实现为Datarow的类) 第二个接口是ICanGetByRow,如下所示: Public Interface ICanGetByRow(Of T) Function GetByRow(ByVal Row As IRow) As T End Interface Public Function GetObj(Of T As ICanGetByRow(Of T))(
Public Interface ICanGetByRow(Of T)
Function GetByRow(ByVal Row As IRow) As T
End Interface
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
该函数只需获取一个IRow并将其转换为T。这很简单。现在,为了更方便地访问,我想在IRow接口中实现一个函数,该函数获取该行并将其转换为ICanGetByRow
我的界面通过以下功能得到了增强
Function GetObj(Of T As ICanGetByRow(Of T))() As T
你可能会发现问题所在。如果我这样实现它:
Public Interface ICanGetByRow(Of T)
Function GetByRow(ByVal Row As IRow) As T
End Interface
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(of T),我可能做得不对。语法有点奇怪。必须使用{大括号}列出多个约束。像这样:
Interface ICanGetByRow(Of T)
Sub GetByRow(ByVal arg As IRow)
End Interface
Interface IRow
Function GetObj(Of T As {New, ICanGetByRow(Of T)})() As T
End Interface
Class Impl
Implements IRow
Public Function GetObj(Of T As {New, ICanGetByRow(Of T)})() As T Implements IRow.GetObj
Dim foo As New T
foo.GetByRow(Me)
Return foo
End Function
End Class
谢谢,那正是我想要的。