Резюме
Вот краткий ответ:
- Typedefs на самом деле является переменной, используемой генераторами кода во время компиляции.
- C # разрабатывается, чтобы избежать добавления языковых конструкций генерации кода.
Следовательно, концепция typedefs не вписывается в язык C #.
Длинный ответ
В C ++ это имеет больше смысла: C ++ начинал как прекомпилятор, который выплевывал код C, который затем компилировался. Это начало «генератора кода» по-прежнему оказывает влияние на современные функции C ++ (т. Е. Шаблоны по существу являются языком, полным по Тьюрингу, для генерации классов и функций во время компиляции). В этом контексте typedef имеет смысл, потому что это способ получить «результат» фабрики типов времени компиляции или «алгоритм», который «возвращает» тип.
В этом странном мета-языке (который освоили немногие за пределами Boost), typedef на самом деле является переменной.
То, что вы описываете, менее сложно, но вы все еще пытаетесь использовать typedef как переменную. В этом случае он используется в качестве входной переменной. Поэтому, когда другой код использует typedef, он на самом деле не использует этот тип напрямую. Скорее, он действует как генератор кода во время компиляции, создавая классы и методы, основанные на вводимых переменных typedef. Даже если вы игнорируете шаблоны C ++ и просто смотрите на определения типов C, эффект тот же.
C ++ и генеративное программирование
C ++ был разработан, чтобы быть многопараметрическим языком (ОО и процедурный, но не функциональный до выхода Boost). Интересно, что шаблоны развили неожиданный парадайн: генеративное программирование. (Генеративное программирование существовало до C ++, но C ++ сделало его популярным). Генеративные программы - это на самом деле метапрограммы, которые при компиляции генерируют необходимые классы и методы, которые, в свою очередь, компилируются в исполняемые файлы.
C # и генеративное программирование
Наши инструменты медленно развиваются в том же направлении. Конечно, рефлекторный излучатель можно использовать для «ручного» генеративного программирования, но это довольно болезненно. То, как провайдеры LINQ используют деревья выражений, носит очень генеративный характер. Шаблоны T4 очень близки, но все еще не дотягивают. «Компилятор как сервис», который, как мы надеемся, будет частью C # vNext, представляется наиболее перспективным, если его можно объединить с некоторой переменной типа (такой как typedef).
Эта единственная часть головоломки все еще отсутствует : генеративным программам нужен какой-то механизм автоматического запуска (в C ++ это обрабатывается неявным созданием шаблона ).
Однако, явно не цель C # иметь какой-либо «генератор кода» на языке C #, такой как шаблоны C ++ (вероятно, ради понятности; очень немногие программисты C ++ понимают шаблоны C ++ ). Это, вероятно, будет нишей, удовлетворенной T4, а не C #.
Заключение (повторяя резюме)
Все вышесказанное означает следующее:
- Typedefs - это переменная, используемая генераторами кода.
- C # разрабатывается, чтобы избежать добавления языковых конструкций генерации кода.
Следовательно, концепция typedefs не вписывается в язык C #.