我创建了一个泛型类,其约束为IComparable,如下所示:
Public Class Foo(Of T As IComparable)
Private _f As T
Public Sub New(ByVal f As T)
_f = f
End Sub
Public Function GetBar() As Bar
Return New Bar(Me) 'compiler error: Value of type Foo(of T)
'cannot be converted to Foo(of IComparable)
End Function
End Class
我有另一个类,它将构造函数参数作为定义的第一个类的对象:
Public Class Bar
Private _foo As Foo(Of IComparable)
Public Sub New(ByVal foo As Foo(Of IComparable))
_foo = foo
End Sub
End Class
但是,在尝试创建Bar对象时出现显示的错误。
任何人都可以解释为什么我会收到此错误?我希望编译器知道类型T是任何IComparable类型......
我发现了一个类似的问题here,但我不知道如何在我的情况下使用它。
答案 0 :(得分:1)
我希望编译器知道类型T是任何IComparable类型......
是的,它知道 - 但是您的Bar
构造函数期望Foo(Of IComparable)
而不是Foo(Of T)
其中T
实现IComparable
。您需要通用协方差,但不能将其应用于.NET中的类(仅限接口和委托)。
一个选项是使Bar
也是通用的,另一个类型参数T
被限制为实现IComparable
。然后,您的Foo.GetBar()
方法可能会返回Bar(Of T)
。