假设:
class TKey {}
class TBaseValue {}
class TValue : TBaseValue {}
我们如何施展
Dictionary<TKey, TValue>
作为
Dictionary<TKey, TBaseValue>
为什么不能暗中进行呢?
答案 0 :(得分:1)
由于Dictionary<TKey, TValue>
不是只读的,因此您无法在此处使用协方差(事实上,声明的类型是在没有out
或in
的情况下允许合作/禁忌方差)。
为了说明为什么会出现这种情况,只需考虑一旦你投向Dictionary<TKey, TBaseValue>
后会发生什么。您仍在处理原始字典,其原始字典应该只是TValue
。但是这样,您可以添加一些不同的TBaseValue
子类(甚至TBaseValue
本身),这会违反原始对象类型的规则。
基本上,这是C#阻止你犯大错的方法。 :)