我收到以下异常:
无法转换类型' MyClass`1 [DerivedClass]'输入' MyClass`1 [BaseClass]'。
尝试从函数调用返回MyClass(DerivedClass)类型的对象后,尝试进行隐式转换。有没有办法明确地投这个?
Public Class IClass(Of T)
GetModel() as T
End Class
Public Class MyClass(Of T)
Implements IClass (of T)
Public Function GetModel() As T Implements IClass(Of T).GetModel
Return _model
End Function
'Other methods/properties omitted for brevity
End Class
Public BaseClass
...
End Class
Public DerivedClass
Inherits BaseClass
...
End Class
在这个例子中,我试图显式转换,在我的程序中有一个隐式转换。然而,两者都导致无法投射相同的结果(虽然一个是在运行时,一个不会编译)
Dim c1 As New MyClass(Of DerivedClass)
Dim c2 = TryCast(c1, MyClass(Of BaseClass))
编辑:我认为我简化了我的示例,不需要显示任何代码,但我想不是基于评论。所以我添加了一些示例代码。
虽然我更喜欢用vb.net编写回复,但C#也是可以接受的(无论你更熟悉)。
我只是略微熟悉泛型方差的概念(只是在试图找到当前问题的解决方案时偶然发现),所以如果这是解决方案,我们将非常感谢详细解释或链接。