2011-01-21 30 views
9

En C++, es fácil escribir algo en la línea de:Definición de un Alias ​​Tipo en C# en varios archivos

#ifdef FAST 
typedef Real float; 
#endif 

#ifdef SLOW 
typedef Real double; 
#endif 

#ifdef SLOWER 
typedef Real quad; 
#endif 

en algún archivo cabecera común para que pudiera escribir simplemente una versión de código y #define el versión apropiada para obtener diferentes binarios.

sé en C# que puede hacer algo similar a lo largo de las líneas de:

using Real = double; 

Así que usted puede conseguir la semántica similares a typedefs. ¿Pero es posible hacer algo similar al código C++ anterior que no tendría que escribir en cada archivo?

+3

o__O ¿Qué es 'quad'? – Mehrdad

+0

IMO suena como un candidato potencial para Dependency Injection si dichos binarios son ensamblados. – Terrance

+1

@Mehrdad: un tipo de datos de punto flotante hipotético que es dos veces más grande que un doble. –

Respuesta

6

No si quiere que use los operadores de IL incorporados, tendría que hacerlo por archivo. Sin embargo, si no es necesario que (sospecho que hace ) se podría encapsular en un struct:

public struct Real { 
    private readonly REAL_TYPE value; 
    public(REAL_TYPE value) { this.value = value; } 
    // TODO add lots of operators (add, multiply. etc) here... 
} 

(donde REAL_TYPE es un alias de using en el único archivo que declara Real)

Por mi dinero, no vale la pena. Y el uso si los operadores estáticos serán relativamente más lentos que las operaciones directas de IL que obtendría si estuviera in situ.

+0

Así que supongo que mi única opción real es un bloque gigante de #if #elses en la parte superior de todos mis archivos. –

+0

@Sakkilla o evita el escenario por completo :). –

+0

Bueno, uno de mis requisitos es poder especificar los diferentes niveles de precisión utilizados en los cálculos. Hay una compensación de velocidad versus precisión, en algunos casos no tiene sentido usar dobles y en otros es un mínimo absoluto. –

-3

lo más parecido serían las clases parciales. partial classes le permiten definir una clase en varios archivos.

+4

Eso no logra este objetivo en absoluto; el alias 'using' no se aplicará entre diferentes archivos de una clase parcial. –

Cuestiones relacionadas