告诉泛型函数它将使用vb.net中带有构造函数的接口

告诉泛型函数它将使用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))(

好的,我一直在尝试在一个示例项目中玩弄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))() 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

谢谢,那正是我想要的。