Tengo un problema similar al del Accessing a static property of a child in a parent method. La respuesta preferida insinúa que el diseño de las clases es defectuoso y se necesita más información para analizar el problema.Acceder a una propiedad estática de un niño en un método principal - Consideraciones de diseño
Aquí está la situación que deseo analizar con usted.
Quiero implementar algunos tipos de datos de unidad de conocimiento como longitud, masa, actual, ... Debe haber un molde implícito para crear las instancias de una cadena dada. Como ejemplo "1.5 m" debería dar lo mismo que "150 cm", o "20 in" debe tratarse correctamente.
Para poder convertir unidades diferentes, necesito constantes de conversión de cantidades específicas. Mi idea era crear una clase base abstracta con algunos métodos de traducción estáticos. Esos deben usar el diccionario específico de la clase definido estáticamente para hacer su trabajo. Así que eche un vistazo al ejemplo.
public class PhysicalQuantities
{
protected static Dictionary<string, double> myConvertableUnits;
public static double getConversionFactorToSI(String baseUnit_in)
{
return myConvertableUnits[baseUnit_in];
}
}
public class Length : PhysicalQuantities
{
protected static Dictionary<string, double> myConvertableUnits = new Dictionary<string, double>()
{
{ "in", 0.0254 }, { "ft", 0.3048 }
};
}
class Program
{
static void Main(string[] args)
{
Length.getConversionFactorToSI("in");
}
}
creo que esto le da un uso más intuitivo y mantiene el código compacto y muy fácil de leer y extensible. Pero, por supuesto, encontré los mismos problemas que describe el post.
Ahora mi pregunta es: ¿Cómo puedo evitar este problema por diseño?
Me pregunto si una conversión definida como 'f (doble)' alguna vez te meterá en problemas . Puede ser que una conversión requiera algo más. 'Func' o 'Func ' podría ser mejor. –
Hogan
puede pasar de estático a no estático - no creo que pierda mucho –