如何编写属性以便访问内部变量
本文关键字:访问 内部 变量 何编写 属性 | 更新日期: 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;
}
}
问题是Rectangle
是struct
。属性访问器实际上是一个方法,当它返回结构体时,它只是被复制,所以你不能那样修改底层结构体。
解决方案:
- 如果矩形是你的代码,让它的类
-
r = Window; r.X -= amount; Window = r;
也是一个很好的例子,为什么结构应该是不可变的。你就不会有这种诱惑了
Rectangle
是struct
-因此您的属性返回值,而不是变量。
这不起作用,因为System.Drawing.Rectangle
被定义为struct(值类型)。
这是不允许的,因为当你引用属性时,你会得到一个值(struct)的副本。因此,在结构体上赋值X属性会对Window属性产生影响。