带有通用接口参数的.NET通用参数

时间:2016-11-03 15:25:52

标签: .net vb.net

我正在尝试创建一个结构,其中基类具有必须满足接口要求的通用属性,并且接受该泛型参数的类将用作另一个类的泛型参数。

类似于以下示例:

Public MustInherit Class MainClass(Of T As {iThing(Of IParameter)})
    Public Property s As T
End Class

Public Interface IParameter
End Interface

Public Interface ithing(Of Tx)
    Property x As Tx
End Interface

Public Class Thing(Of Tx) : Implements iThing(Of Tx)
    Property x As Tx Implements iThing(Of Tx).x
End Class

Public Class MyMainClass1(Of T As Thing(Of IParameter)) : Inherits MainClass(Of T)
End Class

Public Class SubMainClass1 : Inherits MyMainClass1(Of Thing(Of MyParameter))
    Public Class myParameter : Implements iParameter
    End Class
End Class

将有许多类,如SubMainClass,它们将定义自己的参数,所有类都实现IParameter接口。但是,Thing(Of MyParameter)现在与MainClass上的约束不匹配,从而产生以下编译错误

  

错误BC32044:类型参数'Thing(Of MySubMainClass1.myParameter)'不继承或实现约束类型'Thing(Of IParameter)'。           公共类MySubMainClass1:继承MyMainClass1(Thing(of MyParameter))

有没有办法让泛型约束接受一个基于接口有自己的Generic参数的对象?

更新

这样可行,但我确实希望尽可能避免这种情况,因为这意味着为所有子类添加额外的复杂功能。我希望这不是唯一的选择。

将高级通用参数拆分为两个:

Public Mustinherit Class MainClass2(Of T as {iThing(of Tp)}, Tp As IParameter)
    Public Property s As T
End Class

使相关的子类传递两个通用参数

Public Class MyMainClass2(Of T As Thing(of Tp), Tp As IParameter)
   Inherits MainClass2(of T, Tp)
End Class

Public Class MySubMainClass2
    Inherits MyMainClass2(Of Thing(Of MyParameter), MyParameter )

    Public Class myParameter
        Implements iParameter
    End Class
End Class

0 个答案:

没有答案