你如何写一个属性,以便你可以访问内部变量?

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)

And*_*rey 7

问题就在Rectangle于此struct.属性访问器实际上是一个方法,当它返回struct时,它只是被复制,所以你不能这样修改底层struct.

解决方案:

  1. 如果Rectangle是你的代码,那就让它成为类.
  2. r = Window; r.X -= amount; Window = r;

顺便说一句,你应该感谢C#编译器,因为从技术上讲它可以修改那个X,但它会是临时对象的字段/道具,它会让你以后调试地狱.在C++中,它实际上是编译的.

这也是为什么结构应该是不可变的很好的例子.你不会有这种诱惑.