JMD наполовину правильно. На самом деле, абсолютно неправильно говорить, что мы сможем создать общий список с помощью C # 4.0. Это правда, что ковариация и контравариантность будут поддерживаться в C # 4.0, но она будет работать только с интерфейсом и делегатом и будет иметь много ограничений. Следовательно, он не будет работать с List
.
Причина действительно проста.
Если B является подклассом A, мы не можем сказать, что List<B>
является подклассом List<A>
.
И вот почему.
List<A>
предоставляет некоторые методы ковариаций (возвращающие значение) и некоторые методы противоречий (принимая значение в качестве параметра).
например.
List<A>
подвергает Add(A);
List<B>
подвергает Add(B);
Если List<B>
наследует от List<A>
..., чем вы могли бы сделать List<B>.Add(A);
Следовательно, вы потеряете все типы безопасности дженериков.