如何编写属性以便访问内部变量

本文关键字:访问 内部 变量 何编写 属性 | 更新日期: 2023-09-27 18:09:36

我有一个包含矩形的属性,我把它命名为Window。当我尝试使用属性来改变矩形的位置或"X"值时,我得到一个错误:"不能修改窗口的返回值,因为它不是一个变量。"

现在我知道我可以直接访问变量,但我更希望能够修改"X"的值。我也不想每次修改它都创建一个新的矩形

那么我是否可以添加一些东西到我的属性中使我能够通过属性修改X值?

这是我试图使用属性的地方:

Window.X -= amount;

属性在这里:

private Rectangle _window;
public Rectangle Window
{
    get { return _window;}
    set
    {
        if (/*condition*/)
            _window = value;
    }
}

如何编写属性以便访问内部变量

问题是Rectanglestruct。属性访问器实际上是一个方法,当它返回结构体时,它只是被复制,所以你不能那样修改底层结构体。

解决方案:

  1. 如果矩形是你的代码,让它的类
  2. r = Window; r.X -= amount; Window = r;
顺便说一下,你应该感谢c#编译器,因为从技术上讲,它可以修改X,但它将是临时对象的字段/道具,它将使以后的调试对你来说是一个地狱。在c++中,它实际上编译。

也是一个很好的例子,为什么结构应该是不可变的。你就不会有这种诱惑了

Rectanglestruct -因此您的属性返回,而不是变量。

这不起作用,因为System.Drawing.Rectangle被定义为struct(值类型)。

这是不允许的,因为当你引用属性时,你会得到一个值(struct)的副本。因此,在结构体上赋值X属性会对Window属性产生影响。