Resumen
Aquí está la respuesta corta:
- typedefs son en realidad una variable utilizada por los generadores de código de tiempo de compilación.
- C# se está diseñando para evitar agregar construcciones de lenguaje de generación de código.
Por lo tanto, el concepto de typedefs no encaja bien con el lenguaje C#.
Respuesta larga
En C++, tiene más sentido: C++ comenzó como un precompilador que escupió el código C, que luego fue compilado. Este "generador de códigos" que comienza todavía tiene efectos en las características modernas de C++ (es decir, las plantillas son esencialmente un lenguaje completo de Turing para generar clases y funciones en tiempo de compilación). En este contexto, un typedef tiene sentido porque es una forma de obtener el "resultado" de una fábrica de tipo de compilación o "algoritmo" que "devuelve" un tipo.
En este extraño metalenguaje (que pocos fuera de Boost han dominado), un typedef es realmente una variable.
Lo que describes es menos complejo, pero aún estás tratando de usar typedef como variable. En este caso, se usa como una variable de entrada. Entonces, cuando otro código usa typedef, realmente no usa ese tipo directamente. Más bien, actúa como un generador de código en tiempo de compilación, construyendo clases y métodos basados en variables de entrada typedef'ed. Incluso si ignora las plantillas de C++ y simplemente mira C typedefs, el efecto es el mismo.
C++ y generativo Programación
C++ fue diseñado para ser un lenguaje multi-paradign (OO y de procedimiento, pero no es funcional hasta que salieron Boost). Curiosamente, las plantillas han evolucionado en un paradign inesperado: la programación generativa. (La programación generativa existía antes de C++, pero C++ la hizo popular). Los programas generativos son en realidad metaprogramas que, cuando se compilan, generan las clases y los métodos necesarios, que a su vez se compilan en ejecutables.
C# y generativo Programación
Nuestras herramientas están evolucionando lentamente en la misma dirección. Por supuesto, la emisión de reflejo puede usarse para la programación generativa "manual", pero es bastante dolorosa. La forma en que los proveedores de LINQ usan los árboles de expresión es de naturaleza muy generativa. Las plantillas T4 se acercan mucho, pero aún se quedan cortas. El "compilador como servicio" que, con suerte, formará parte de C# vNext, parece ser el más prometedor de todos, si se pudiera combinar con algún tipo de variable de tipo (como un typedef).
Ésta pieza del rompecabezas es still missing: programas generativos necesitan algún tipo de mecanismo de activación automática (en C++, esto es manejado por implícita de instancias de plantilla).
Sin embargo, es explícitamente no una meta de C# para tener cualquier tipo de "generador de código" en el lenguaje C# como plantillas de C++ (probablemente por el bien de la comprensibilidad; muy pocos programadores de C++ entienden C plantillas ++). Este será probablemente un nicho satisfecho por T4 en lugar de C#.
Conclusión (repitiendo el Resumen)
Todo lo anterior es para decir esto:
- typedefs son una variable utilizada por los generadores de código.
- C# se está diseñando para evitar agregar construcciones de lenguaje de generación de código.
Por lo tanto, el concepto de typedefs no encaja bien con el lenguaje C#.
¿Por qué no puede derivar de los tipos incorporados? – arootbeer
Solo tengo curiosidad? ¿Cuál sería una situación o una razón por la que alguien quisiera hacer esto? Lo siento si esto suena raro, solo ignoro por qué no querrías usar int. Parece que sería confuso para otro desarrollador leer su código. –
De acuerdo, le interesó leer esto, pero debe ser una mala práctica –