Ковариация .NET 4.0

В ответ на другой вопрос я попытался сделать следующее. Я не думаю, что я правильно истолковал этот вопрос, но мне интересно, возможно ли это как-то (мои попытки потерпели неудачу), а если нет, то почему:

    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). Итак, теперь мой вопрос: почему? Какова была идея дизайна (одна для Эрика Липперта, я думаю): это невозможно, нежелательно или это в списке «может быть, однажды»?

9
задан Kirill Kobelev 6 March 2018 в 04:46
поделиться