В ответ на другой вопрос я попытался сделать следующее. Я не думаю, что я правильно истолковал этот вопрос, но мне интересно, возможно ли это как-то (мои попытки потерпели неудачу), а если нет, то почему:
public class MyBaseClass { }
public class MyClass : MyBaseClass { }
public class B { }
public class A : B { }
static void Main(string[] args)
{
// Does not compile
B myVar = new A();
}
Я подумал, что это можно заставить работать, используя общий интерфейс с параметр ковариантного типа:
interface IB { }
public class B : IB { }
но я ошибался, это тоже не работает.
РЕДАКТИРОВАТЬ
Как указал SLaks, «Интерфейсы ковариантны; классы - нет ». (спасибо SLaks). Итак, теперь мой вопрос: почему? Какова была идея дизайна (одна для Эрика Липперта, я думаю): это невозможно, нежелательно или это в списке «может быть, однажды»?