Почему генераторы С# не могут быть получены из одного из параметров типового типа, как они могут в шаблонах С++? Я имею ввиду, что это невозможно, потому что CLR не поддерживает это, но почему?
Я знаю о глубоких различиях между шаблонами С++ и С# generics - первые являются компиляционными сущностями и должны быть разрешены во время компиляции, в то время как последние являются сущностями класса первого класса.
Тем не менее, я не вижу причины, почему дизайнеры CLR не придумали схему, которая в конечном итоге позволит генерировать тип CLR из одного из своих типовых параметров. В конце концов, это была бы чрезвычайно полезная функция, я лично очень сильно скучаю.
EDIT:
Я хотел бы знать о проблеме с жестким ядром, которая дает такую высокую цену при реализации этой функции, которая оправдывает ее еще не реализованную. Например, рассмотрите это вымышленное выражение:
class C<T> : T
{
}
Как заметил Эрик Липперт, если " Что, если T - это структура? Что, если T - тип закрытого класса? Что, если T - тип интерфейса? Что, если T - C?! Что, если T является класс, зависший от C? Что, если T - абстрактный тип с абстрактным методом? Что делать, если T имеет меньшую доступность, чем C? Что, если T - System.ValueType? (Можете ли вы иметь неструктуру, которая наследуется от System.ValueType?) Как насчет System.Delegate, System.Enum и т.д."
Как продолжает Эрик, " Это простые, очевидные. Действительно, он прав. Меня интересует конкретный пример не простой, ни очевидной проблемы, которую трудно решить.