Ho un progetto con molti calcoli che coinvolge un sacco di unità del mondo reale:utilizzo di unità del mondo reale, invece di tipi
- Distanza;
- Temperatura;
- Portata;
- ...
Il progetto prevede formule di calcolo complesse e numerose.
Ecco perché ho supposto l'uso di tipi personalizzati come Temperatura, Distanza ... può essere buono per la leggibilità del codice. Ad esempio:
Temperature x = -55.3;
Meter y = 3;
o
var x = new Temperature(-55.3);
ho cercato di fare una classe di temperatura che utilizza un valore doppio interna.
public class Temperature
{
double _Value = double.NaN;
public Temperature() { }
public Temperature(double v) {
_Value = v;
}
public static implicit operator Temperature(double v) {
return new Temperature(v);
}
}
Ma la classe è annullabile. Ciò significa che qualcosa del tipo:
Temperature myTemp;
è "corretto" e sarà nullo. Non lo voglio Non voglio usare le strutture perché sono troppo limitati:
- Essi non possono utilizzare senza parametri costruttore né campo di istanza intializers come
double _Value = double.Nan;
per definire un valore di default (I bacchetta di default sottostanti valore doppio per essere NaN) - Non possono eredita dalle classi, ma solo in grado di implementare interfacce
loro mi chiedo se ci sia un modo per dire C#:
Temperature myTemp = 23K; // C# does not implement anything to make K unit...
ma so che C# non gestisce nessuna unità personalizzata.
Temperature myTemp = new Kelvin(23); // This might work
quindi immagino che potrei creare due classi Celsius e Kelvin che eredita dalla temperatura, e poi ho iniziato a chiedermi se l'idea davvero la pena, perché si tratta di un sacco di codifica e test.
Questa è la discussione vorrei iniziare:
Sarebbe l'uso di unità del mondo reale nel mio codice, invece di tipi .NET sarebbe una cosa buona o no? Qualcuno lo ha già fatto? Quali sono le insidie e le migliori pratiche? O dovrei stare lontano da questo e usare i tipi standard di .NET?
Sidenote: F # supporta le unità in modo nativo – CodesInChaos
Perché pensi che le strutture siano limitate? Penso che le strutture siano esattamente ciò che userò qui. Le tue lezioni porteranno solo un valore numerico e immutabile - caso d'uso ideale per le strutture. – NOtherDev
Interruzione! Purtroppo non posso permettermi di usare F # nel mio progetto. Ma sicuramente lo ricordo per il futuro – Larry