У меня похожая проблема с постом Доступ к статическому свойству потомка в родительском методе . Предпочтительный ответ намекает на то, что дизайн классов неверен, и для обсуждения проблемы требуется больше информации.
Вот ситуация, которую я хочу обсудить с вами.
Я хочу реализовать некоторые типы данных, учитывающие единицу, такие как длина, масса, ток, ...
Должно быть неявное приведение для создания экземпляров из заданной строки. Например, «1,5 м» должно соответствовать значению «150 см», или «20 дюймов» следует обрабатывать правильно.
Чтобы иметь возможность конвертировать между различными единицами, мне нужны количественные константы преобразования.
Моя идея состояла в том, чтобы создать абстрактный базовый класс с некоторыми статическими методами перевода.
Они должны использовать статически определенный словарь для своей работы.
Итак, посмотрите на пример.
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");
}
}
Я думаю, что это дает довольно интуитивное использование и делает код компактным, достаточно читабельным и расширяемым. Но, конечно же, я столкнулся с теми же проблемами, о которых упоминает post .
Теперь у меня вопрос: как я могу избежать этих проблем при разработке?