我创建了一个具有约束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类型。。。
我在这里发现了一个类似的问题,但我不知道如何在我的情况下使用它。
我希望编译器知道类型T是任何IComparable类型。。。
是的,它知道这一点,但是Bar
构造函数期望的是Foo(Of IComparable)
,而不是T
实现IComparable
的Foo(Of T)
。您想要通用协方差,但这不能应用于.NET中的类(仅接口和委托)。
一种选择是使用另一个类型参数T
使Bar
也通用,该参数被约束为实现IComparable
。那么您的Foo.GetBar()
方法可能会返回一个Bar(Of T)
。