Ich habe ein ähnliches Problem wie im Beitrag Zugriff auf eine statische Eigenschaft eines Kindes in einer Elternmethode. Die bevorzugte Antwort deutet darauf hin, dass das Design der Klassen fehlerhaft ist und weitere Informationen benötigt werden, um das Problem zu diskutieren.
Hier ist die Situation, über die ich mit Ihnen diskutieren möchte.
Ich möchte einige datentypen für Einheiten implementieren, wie Länge, Masse, Strom, ... Es sollte einen impliziten Cast geben, um die Instanzen aus einem gegebenen String zu erstellen. Zum Beispiel sollte "1,5 m" dasselbe wie "150 cm" ergeben oder "20 in" korrekt behandelt werden.
Um zwischen verschiedenen Einheiten konvertieren zu können, benötige ich spezifische Konvertierungskonstanten für jede Größe. Meine Idee war es, eine abstrakte Basisklasse mit einigen statischen Übersetzungsmethoden zu erstellen. Diese sollten Klassen-spezifische statisch definierte Wörterbücher verwenden, um ihre Arbeit zu erledigen. Schauen Sie sich also das Beispiel an.
public class PhysicalQuantities
{
protected static Dictionary myConvertableUnits;
public static double getConversionFactorToSI(String baseUnit_in)
{
return myConvertableUnits[baseUnit_in];
}
}
public class Length : PhysicalQuantities
{
protected static Dictionary myConvertableUnits = new Dictionary()
{
{ "in", 0.0254 }, { "ft", 0.3048 }
};
}
class Program
{
static void Main(string[] args)
{
Length.getConversionFactorToSI("in");
}
}
Ich denke, dies bietet eine recht intuitive Verwendung und hält den Code kompakt und ziemlich lesbar und erweiterbar. Aber natürlich bin ich auf die gleichen Probleme gestoßen, die im referenzierten Beitrag beschrieben werden.
Jetzt meine Frage: Wie kann ich diese Probleme durch Design vermeiden?
0 Stimmen
Ich frage mich, ob eine Konvertierung, die als
f(double)
definiert ist, jemals Probleme bereiten wird. Es könnte sein, dass eine Konvertierung etwas anderes erfordert.Func
oderFunc
wären vielleicht besser.0 Stimmen
Können Sie einfach von statisch zu nicht statisch wechseln - Ich glaube nicht, dass Sie viel verlieren würden