使用访问器公开类属性

时间:2010-07-31 07:06:17

标签: c# accessor

我不知道描述我的问题的正确技术术语,所以我举一个例子:

    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);

2 个答案:

答案 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时,您实际上是在操纵值类型的临时副本,这当然对原始实例没有影响。