【问题标题】:Property set not getting used when changing a property of the property更改属性的属性时未使用属性集
【发布时间】:2019-07-30 22:54:53
【问题描述】:

我有一个超级简单的类点:

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

    public double X;
    public double Y;
}

我使用 Point in a Box 类:

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 的设置器。而是调用 getter。我需要在适当的时候更改 LowerRHCorner 支持变量 x 和 y。我该怎么做?

【问题讨论】:

  • 你能提供一个minimal reproducible example吗?
  • 如果你设置了UpperLHCorner.X,那么你就不会调用UpperLHCorner 的setter。您没有改变重点,只是其中一个字段(您可能会考虑制作 XY 属性而不是字段)。此外,您应该显示_width_height 的定义,以制作可编译的示例。

标签: c# getter-setter


【解决方案1】:

您不能使用UpperLHCorner 的setter 来修改_lowerRHCorner 的属性。调用 setter 的唯一时间是为 UpperLHCorner 本身分配一个新值。为了实现您需要做的事情,您必须使用带有XY 参数的SetUpperLHCorner 之类的方法。在该方法中,您可以调整_lowerRHCorner 属性。

当然,如果你真的想要,你可以在 Point 的 XY 属性上添加事件处理程序。但那将是...... blech。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 2023-04-05
    • 1970-01-01
    • 2011-03-16
    相关资源
    最近更新 更多