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

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

21.05.24 13:57
Re: Абасс... обсудите рахитекурту
 
alex445 патриот
in Antwort Программист 21.05.24 13:51, Zuletzt geändert 21.05.24 14:51 (alex445)
Я также не совсем понимаю, каким образом тут будет установлено значение maxValue


public class Param
{
    double maxValue;
    public virtual double MaxValue
    {
        get => return maxValue;
        set => maxValue = ValidateMaxValue();
    }
 
    protected double virtual ValidateMaxValue() => ...
}
если value из сеттера не передается :)

Это я опечатался - надо передать значение из сеттера. Ещё надо присвоить currentValue при валидации MaxValue в классе ParamVolatile, затем там же вернуть отвалидированное значение MaxValue. И убрать virtual у свойства MaxValue. И изменить метод ValidateCurrentValue, чтобы он мог принимать значение MaxValue. Мдаа, много изменить надо, чтобы ваш подход применить. Вот так будет правильнее


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

public class ParamVolatile : Param
{
    double currentValue;
    public double CurrentValue
    {
        get => return currentValue;
        set => currentValue = ValidateCurrentValue(value);
    }
 
    protected override double ValidateMaxValue(double maxValue)
    {
        var newMaxValue = base.ValidateMaxValue(maxValue);
        currentValue = ValidateCurrentValue(CurrentValue, newMaxValue);
        return newMaxValue;
    }
 
    double ValidateCurrentValue(double currentValue, double maxValue) => ...
}
 

Sprung zu