Синхронизировать данные членов в классе - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь написать класс, в котором есть связанные элементы данных. Под связным я имею в виду, что значения могут быть выведены друг от друга. Например,

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. Автоматически обновлять другие поля.
  3. Повторное использование кода в максимально возможной степени

1) и 2) в некотором роде достигаются в вышеприведенном примере. Но это выглядит довольно грязно с большим количеством дублирующегося кода. Есть ли лучший способ организовать это?

Редактировать: Основываясь на комментарии @Ed Plunkett, использовал закрытых членов, чтобы не сталкиваться с проблемами рекурсии.

...