如何在.NET中将派生泛型类转换为基类?

时间:2015-07-23 17:17:34

标签: c# .net vb.net generics

我收到以下异常:

  

无法转换类型' 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#也是可以接受的(无论你更熟悉)。

我只是略微熟悉泛型方差的概念(只是在试图找到当前问题的解决方案时偶然发现),所以如果这是解决方案,我们将非常感谢详细解释或链接。

0 个答案:

没有答案