我不知道描述我的问题的正确技术术语,所以我举一个例子:
private Point _PrivateVect = new Point();
public Point Publicvect
{
get
{
return _PrivateVect;
}
set
{
_PrivateVect = value;
}
}
问题是如果我想访问Publicvect.X
,我会收到错误Cannot modify the return value of 'Publicvect' because it is not a variable
。有没有解决的办法?或者我只需要永远Publicvect = new Point(NewX, Publicvect.Y);
?
答案 0 :(得分:2)
可变结构的另一个原因是邪恶的。一种解决方法是为方便起见将维度公开为访问者:
public Point PublicX {
get {return _PrivateVect.X;}
set {_PrivateVect.X = value;}
}
public Point PublicY {
get {return _PrivateVect.Y;}
set {_PrivateVect.Y = value;}
}
但其他就是这个;是的,每次都需要new Point(x,y)
,因为Point
是一个结构。当您通过属性访问它时,您会获得它的副本,因此如果您更改副本然后放弃副本,则只会丢失更改。
答案 1 :(得分:1)
您遇到的问题是Point类型是Value Type
。因此,当您操作Pointvect.X时,您实际上是在操纵值类型的临时副本,这当然对原始实例没有影响。