我正在尝试创建一个结构,其中基类具有必须满足接口要求的通用属性,并且接受该泛型参数的类将用作另一个类的泛型参数。
类似于以下示例:
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