русский
Germany.ruForen → Архив Досок→ Programmierung

Абасс... обсудите рахитекурту

18.05.24 14:19
Re: Абасс... обсудите рахитекурту
 
alex445 патриот
in Antwort AlexNek 18.05.24 14:15, Zuletzt geändert 18.05.24 14:29 (alex445)
Что значит "вся логика в одном объекте"?
Ну вот же описан объект в нём и должно быть всё



public double CurrentValue { get; set; }
public double MaxValue { get; set; }

Нет, базовый класс тоже вполне самодостаточный - можно создавать его объекты отдельно. Но часть его функциональности я бы хотел иметь в потомке. Гляньте мой последний вариант. Мне в нём не нравится только то, что свойство MaxValue в потомке почти полностью повторяет родителя. Может, вернуться к virtual-override и вызову базового сеттера, оставив лишь валидирующие функции?


public class Param
{
    double maxValue;
    public virtual double MaxValue
    {
        get => maxValue;
        set => maxValue = ValidateMaxValue(value);
    }

    double ValidateMaxValue(double value) => ...
}

public class ParamVolatile : Param
{
    public override double MaxValue
    {
        get => base.MaxValue;
        set
        {
            base.MaxValue = value;
            currentValue = ValidateCurrentValue(CurrentValue, 0, MaxValue);
        }
    }

    double currentValue;
    public double CurrentValue
    {
        get => currentValue;
        set => currentValue = ValidateCurrentValue(CurrentValue, 0, MaxValue);
    }

    ValidateCurrentValue(double value, double min, double max) => Math.Clamp(value, min, max);
}
 

Sprung zu