Можно ли «преобразовать» общий класс, основанный на T, в общий класс, основанный на чем-то более общем, чем T?
Например, предположим, что у меня есть класс с именем Derived
, который наследуется от класса с именем Base
. Могу ли я когда-нибудь сделать что-то вроде этого:
List<Derived> der = new List<Derived>();
List<Base> bas = (List<Base>) der;
Или, используя интерфейсы, можно ли сделать что-то вроде этого:
List<MyClonableType> specific = new List<MyClonableType>();
List<IClonable> general = (List<IClonable>)specific;
Как написано здесь, каждый из этих примеров завершается с ошибкой InvalidCastException
. Вопрос, о котором мы спорим, заключается в том, действительно ли это невозможно, или это просто синтаксическая ошибка, которую можно было бы исправить, если бы мы знали, как это сделать.
List<T>
. Это небезопасно по своей сути. 09.02.2010IList<T>
10.02.2010