Я пытаюсь написать класс, в котором есть связанные элементы данных. Под связным я имею в виду, что значения могут быть выведены друг от друга. Например,
public class Salary
{
private double _LocalAmount;
private double _USDAmount;
private double _LocalAmountNormalized;
private double _USDAmountNormalized;
public double ExchangeRate { get; set; }
public double PartTimeMultiplier { get; set; }
public double LocalAmount
{
get { return _LocalAmount;}
set
{
_LocalAmount = value;
_USDAmount = _LocalAmount * ExchangeRate;
_LocalAmountNormalized = _LocalAmount / PartTimeMultiplier;
_USDAmountNormalized = _USDAmount / PartTimeMultiplier;
}
}
public double USDAmount
{
get { return _USDAmount;}
set
{
_USDAmount = value;
_LocalAmount = _USDAmount / ExchangeRate;
_LocalAmountNormalized = _LocalAmount / PartTimeMultiplier;
_USDAmountNormalized = _USDAmount / PartTimeMultiplier;
}
}
public double LocalAmountNormalized
{
get { return _LocalAmountNormalized;}
set
{
_LocalAmountNormalized = value;
_LocalAmount = _LocalAmountNormalized * PartTimeMultiplier;
_USDAmount = _LocalAmount * ExchangeRate;
_USDAmountNormalized = _USDAmount / PartTimeMultiplier;
}
}
public double USDAmountNormalized
{
get { return _USDAmountNormalized;}
set
{
_USDAmountNormalized = value;
_USDAmount = _USDAmountNormalized * PartTimeMultiplier;
_LocalAmount = USDAmount / ExchangeRate;
_USDAmountNormalized = _USDAmount / PartTimeMultiplier;
}
}
}
Я хочу добиться нескольких вещей:
- Уметь редактировать любое из полей Сумма.
- Автоматически обновлять другие поля.
- Повторное использование кода в максимально возможной степени
1) и 2) в некотором роде достигаются в вышеприведенном примере. Но это выглядит довольно грязно с большим количеством дублирующегося кода. Есть ли лучший способ организовать это?
Редактировать: Основываясь на комментарии @Ed Plunkett, использовал закрытых членов, чтобы не сталкиваться с проблемами рекурсии.