Какова реальная причина такого ограничения? Это просто работа, которую нужно было сделать? Это концептуально сложно? Это невозможно?
Конечно, нельзя использовать параметры типа в полях, потому что они всегда доступны для чтения и записи. Но это не может быть ответом, не так ли?
Причина этого вопроса в том, что я пишу статью о поддержке отклонений в C # 4 и чувствую, что должен объяснить, почему она ограничена делегатами и интерфейсами. Просто чтобы перевернуть бремя доказательства.
Обновление:
Эрик спросил о примере.
Как насчет этого (пока не знаю, имеет ли это смысл: -))
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;
Причиной наличия этого в одном классе может быть кеш, который содержится в самом классе. И, пожалуйста, не называйте животных разных типов одинаковыми!
Кстати, это подводит меня к необязательным параметрам типа в C # 5.0 : -)
Обновление 2: Я не утверждаю, что CLR и C # должны это разрешать. Просто пытаюсь понять, к чему это привело.