【发布时间】:2015-12-11 16:51:36
【问题描述】:
请看下面的代码:
public class Foo
{
public System.Windows.Rect s
{
get;
set;
}
public Foo()
{
s = new System.Windows.Rect(-2, -3, 4, 5); // affects object
s.Inflate(1.5, 1.5); // no effect at all
}
}
有没有办法让非常量 Inflate() 方法在这种情况下工作?如果它没有修改我的objetc,那说明我的Rect对象在我访问的时候被深度复制了?
这些是我的疑问,但真正的问题是:如果还有 setter,为什么访问器不允许修改返回的对象?
【问题讨论】:
-
Inflate返回一个你必须分配给s的新对象 -
@Sergii:你在哪里看到的? Doc 说它返回 void:Rect.Inflate Method
-
这只是为什么要避免可变结构的另一个例子......
-
@sstan 你是对的 - 我得到的第一个链接是 Inflate 方法的静态版本。
-
@Sergii:您刚刚提出了一种解决方法:
s = System.Windows.Rect.Inflate(s, 1.5, 1.5),谢谢!
标签: c# properties accessor