2011-12-15 2 views
12

Si supponga che voglio creare un alias di un tipo in C# utilizzando una sintassi ipotetica:Tecniche per l'aliasing in C#?

Currency = float; 

poi vado via e creare un qualche migliaio di file che utilizzano Currency tipo.

poi mi rendo conto che io preferisco usare tipi FCL:

Currency = System.Single; 

eccellente, tutto il codice funziona ancora.

... mesi più tardi ...

Aspetta, sto ottenendo alcuni errori di arrotondamento strani. Oh ecco perché, System.Single only has 7 digits of precision. Consente fino a 15 cifre che:

Currency = System.Double; 

... anni dopo ...

Ohhhh, virgola mobile non è esatto; moltiplicando $0.0011/unit * 217,384 units si espongono alcune limitazioni dell'utilizzo di virgola mobile. E i ragionieri sono attaccanti contro "irregolarità contabili". Nessun problema:

Currency = System.Decimal; 

... anni dopo ...

applicazioni internazionali? Codici di valuta Hmmmm. Thank you CodeProject:

Currency = Money; 

... poi ...

Ooo, modelli e pratiche. Specifichiamo un po 'di quel codice:

Currency = ICurrency; 

E durante tutto questo codice non sciocco non si è rotto.

so che C# non supporta questo livello di encapsulation e di resilienza con la sintassi che ho inventato.

Ma qualcuno può suggerire una sintassi che può simulatewhatpeoplehavebeentryingtoaccomplish (includingmyself)?

+2

fondamentalmente un typedef in C++/C –

+1

presumo si sa conosce "utilizzando alias" ...? –

+1

Uso "digita alias" ("usando alias") per rendere il codice più semplice da seguire in modo coerente ... tuttavia, sembra un cambiamento di rottura. Le regole (e la firma) relative al tipo in uso sono state modificate. –

risposta

4

È possibile utilizzare using in questo modo: using Currency = System.Single;, ma è necessario farlo in ogni singolo file. Ma ancora più facile da cambiare, rispetto alla ricerca di singoli in tutta l'applicazione.

5

Creare una classe denominata valuta e attuare (o delegato) gli operatori appropriati, quindi basta cambiare la classe utilizzata per memorizzare i dati internamente quando desiderato.