Tengo un proyecto con muchos cálculos que implican una gran cantidad de unidades del mundo real:El uso de unidades del mundo real en lugar de tipos
- Distancia;
- Temperatura;
- Caudal;
- ...
Este proyecto consiste en fórmulas de cálculo complicadas y numerosas.
Es por eso que se supone el uso de tipos personalizados como Temperatura, Distancia ... puede ser bueno para la legibilidad del código. Por ejemplo:
Temperature x = -55.3;
Meter y = 3;
o
var x = new Temperature(-55.3);
Traté de hacer una clase de temperatura que utiliza un valor interno doble.
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);
}
}
Pero la clase es nulable. Esto significa que algo así como:
Temperature myTemp;
es "correcto" y será nulo. No quiero esto. No quiero utilizar estructuras ya que son demasiado limitados:
- No pueden usar intializers constructor ni campo de instancia sin parámetros como
double _Value = double.Nan;
para definir un valor por defecto (I varita por defecto subyacente doble valor para que sea NaN) - No pueden hereda de clases, sólo pueden implementar interfaces
ellos me pregunto si hay una manera de saber C#:
Temperature myTemp = 23K; // C# does not implement anything to make K unit...
pero sé que C# no maneja unidades personalizadas.
Temperature myTemp = new Kelvin(23); // This might work
así que me imagino que podría crear dos clases Celsius y Kelvin que hereda de la temperatura, y luego empecé a preguntarse si la idea realmente vale la pena, ya que implica una gran cantidad de codificación y pruebas.
Esa es la discusión me gustaría empezar:
estaría el uso de unidades del mundo real en mi código en lugar de tipos de .NET sería una buena cosa o no? ¿Alguien ya esta? ¿Cuáles son las trampas y las mejores prácticas? ¿O debería mantenerme alejado de esto y usar tipos .NET estándar?
Sidenote: F # admite unidades de forma nativa – CodesInChaos
¿Por qué crees que las estructuras son limitadas? Creo que las estructuras son exactamente lo que usaré aquí. Sus clases tendrán un único valor numérico e inmutable: caso de uso ideal para las estructuras. – NOtherDev
Interresting! Desafortunadamente no puedo permitirme usar F # en mi proyecto. Pero definitivamente noto esto para el futuro – Larry