【发布时间】:2014-09-22 12:03:41
【问题描述】:
我目前在 Visual Studio 2013 中使用 .NET 4.5 上的 VB。我有一个抽象基类,它包含另一个抽象基类的集合,如下所示:
通用基类:
Public MustInherit Class CustomCollection(Of collectionItemType As CollectionItemBase)
Inherits Collections.ObjectModel.KeyedCollection(Of String, CollectionItemBase)
'...
End Class
通用基类引用的基类:
Public MustInherit Class CollectionItemBase
'...
End Class
我有一组继承通用基类“CustomCollection”的类:
Public Class Collection1
Inherits CustomCollection(Of ClassThatDerivesFromCollectionItemBase1)
'...
End Class
Public Class Collection2
Inherits CustomCollection(Of ClassThatDerivesFromCollectionItemBase2)
'...
End Class
'etc...
这是我用来尝试将 Collection1 的实例转换为 CustomCollection(Of CollectionItemBase) 的代码:
'...
someProperty = instanceOfCollection1.Cast(Of CustomCollection(Of CollectionItemBase))
'...
这会在运行时产生以下错误,对我来说这似乎是无稽之谈:
“无法转换类型的对象 'd__b1`1[ApplicationName.CustomCollection`1[ApplicationName.CollectionItemBase]]' 输入 'ApplicationName.CustomCollection`1[ApplicationName.CollectionItemBase]'。”
它似乎声称它无法将对象转换为自己的类型。有什么想法吗?
【问题讨论】:
-
这段代码有问题。
Inherits CustomCollection(Of ClassThatDerivesFromCustomCollection1)不应该是Inherits CustomCollection(Of ClassThatDerivesFromCollectionItemBase1)吗? -
@Alireza 是的,你是对的!抱歉,我在翻译代码时犯了一个错误,我会立即修复。但是,这在原始代码中不是问题。如果您知道可能导致潜在问题的原因,请告诉我! :-)
-
哦,不。我想澄清一下,然后发布我的答案。我已经准备好了答案:)
-
@Alireza 太棒了,迫不及待地想阅读它!试图弄清楚这一点是一场噩梦。
标签: vb.net generics inheritance interface covariance