更改属性的属性时未使用属性集

时间:2019-03-08 21:19:31

标签: c# getter-setter

我有一个非常简单的类Point:

class Point
{
    public Point(double x, double y)
    {
        X = x;
        Y = y;
    }

    public double X;
    public double Y;
}

我在Box类中使用Point:

internal class Box
{
    private Point _upperLHCorner = new Point();
    private Point _lowerRHCorner = new Point();

    internal Box() { }

    public Point UpperLHCorner
    {
        get
        {
            return _upperLHCorner;
        }

        set
        {
            this._upperLHCorner = value;
            _lowerRHCorner.X = _upperLHCorner.X + _width;
            _lowerRHCorner.Y = _upperLHCorner.Y + _height;
        }
    }

    public Point LowerRHCorner
    {
        get
        {
            return _lowerRHCorner;
        }
    }
}

当我在代码中设置UpperLHCorner.X时,未调用UpperLHCorner的setter。取而代之的是调用getter。我需要在适当时更改LowerRHCorner支持变量x和y。我该怎么做?

1 个答案:

答案 0 :(得分:1)

您不能使用UpperLHCorner的设置方法来修改_lowerRHCorner的属性。唯一调用时间设置器的情况是,如果您为UpperLHCorner本身分配了新值。要实现您需要执行的操作,必须使用带有SetUpperLHCornerX参数的Y之类的方法。通过这种方法,您可以调整_lowerRHCorner属性。

当然,如果确实需要,可以在Point的XY属性上添加事件处理程序。但是那会...很糟糕。