2011-01-21 11 views
9

In C++, è facile scrivere qualcosa sulla falsariga di:definisce un tipo Alias ​​in C# in più file

#ifdef FAST 
typedef Real float; 
#endif 

#ifdef SLOW 
typedef Real double; 
#endif 

#ifdef SLOWER 
typedef Real quad; 
#endif 

In alcuni file di intestazione comune così ho potuto semplicemente scrivere una versione di codice e #define la versione appropriata per ottenere binari diversi.

so in C# si può fare qualcosa di simile sulla falsariga di:

using Real = double; 

In modo che si può ottenere la semantica simili a typedef. Ma è possibile fare qualcosa di simile al codice C++ sopra che non dovrei scrivere in ogni singolo file?

+3

o__O cosa significa "quad"? – Mehrdad

+0

IMO sembra un potenziale candidato per l'iniezione di dipendenza se i binari sono assemblati. – Terrance

+1

@ Mehrdad: un ipotetico tipo di dati in virgola mobile grande il doppio di un doppio. –

risposta

6

Se non si desidera utilizzare gli operatori IL incorporati, è necessario farlo per file. Tuttavia, se non è necessario che (ho il sospetto che fai) si può incapsulare in 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... 
} 

(dove REAL_TYPE è un alias using nel singolo file che dichiara Real)

Per i miei soldi, non ne vale la pena. E l'uso se gli operatori statici saranno relativamente più lenti delle operazioni di IL dirette che si otterrebbero se fossero in-situ.

+0

Quindi immagino che la mia unica vera opzione sia un gigantesco blocco di #if #elsi nella parte superiore di tutti i miei file. –

+0

@Sagekilla o evitare completamente lo scenario :). –

+0

Bene, uno dei miei requisiti è quello di essere in grado di specificare vari livelli di precisione usati nei calcoli. C'è un eccesso di velocità rispetto alla precisione, in alcuni casi è inutile usare il doppio e in altri è un minimo assoluto. –

-3

La cosa più vicina sarebbe una lezione parziale. partial classes consente di definire una classe su più file.

+4

Questo non raggiunge affatto questo scopo; l'alias 'using' non si applica tra diversi file di una classe parziale. –

Problemi correlati