Что такое реальная причина этого ограничения? Это просто работа, которую нужно было сделать? Это концептуально сложно? Это невозможно?
Конечно, нельзя использовать параметры типа в полях, потому что они всегда читают-пишут. Но это не может быть ответом, не так ли?
Причина этого вопроса заключается в том, что я пишу статью о поддержке дисперсии в С# 4, и я чувствую, что я должен объяснить, почему она ограничена делегатами и интерфейсами. Просто чтобы обратить внимание на бремя доказательства.
Update: Эрик спросил о примере.
Как насчет этого (не знаю, если это имеет смысл, но: -))
public class Lookup<out T> where T : Animal {
public T Find(string name) {
Animal a = _cache.FindAnimalByName(name);
return a as T;
}
}
var findReptiles = new Lookup<Reptile>();
Lookup<Animal> findAnimals = findReptiles;
Причиной наличия этого в одном классе может быть кеш, который хранится в самом классе. И, пожалуйста, не называйте своих животных разных типов одинаковыми!
Кстати, это приводит меня к необязательным параметрам типа в С# 5.0: -)
Обновление 2: Я не утверждаю, что CLR и С# должны это допускать. Просто пытаюсь понять, что привело к тому, что это не так.