是否有可能投下List<Subclass>到List<Superclass>在C#4.0?
List<Subclass>
List<Superclass>
遵循以下原则:
class joe : human {} List<joe> joes = GetJoes(); List<human> humanJoes = joes;
这不是协方差吗?
如果可以的话:
human h = joe1 as human;
你为什么不能够做
List<human> humans = joes as List<human>;
(joe)humans [0]是不合法的,因为该项目已被拒绝投放。..每个人都会很高兴。现在唯一的选择是创建一个新列表
您无法执行此操作,因为它并不安全。考虑:
List<Joe> joes = GetJoes(); List<Human> humanJoes = joes; humanJoes.Clear(); humanJoes.Add(new Fred()); Joe joe = joes[0];
显然,最后一行(如果不是更早的那一行) 必须 失败-因为a Fred不是a Joe。的不变性List<T>可防止在 编译 时而不是执行时发生此错误。
Fred
Joe
List<T>