Ora*_*g89 1 .net c# properties c#-4.0
我有一个属性,包含一个我称之为Window的矩形.当我尝试使用属性来更改矩形的位置或"X"值时,我收到一个错误:"无法修改Window的返回值,因为它不是变量."
现在我知道我可以直接访问变量,但我更愿意只修改"X"值.我也不想每次修改它时都要创建一个新的矩形.
那么有什么我可以添加到我的属性,让我通过属性修改X值?
这是我试图使用该属性的地方:
Window.X -= amount;
Run Code Online (Sandbox Code Playgroud)
这是我有自己的地方:
private Rectangle _window;
public Rectangle Window
{
get { return _window;}
set
{
if (/*condition*/)
_window = value;
}
}
Run Code Online (Sandbox Code Playgroud)
问题就在Rectangle
于此struct
.属性访问器实际上是一个方法,当它返回struct时,它只是被复制,所以你不能这样修改底层struct.
解决方案:
r = Window; r.X -= amount; Window = r;
顺便说一句,你应该感谢C#编译器,因为从技术上讲它可以修改那个X,但它会是临时对象的字段/道具,它会让你以后调试地狱.在C++中,它实际上是编译的.
这也是为什么结构应该是不可变的很好的例子.你不会有这种诱惑.