2010-07-31 77 views
3

属性我不知道正确的技术术语来描述我的问题,所以我举一个例子:揭露类访问

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

+1

请显示产生该错误的代码。 – 2010-07-31 07:08:30

+0

@Bob:如果你认为大胆的帮助,它没有。我需要看到实际的代码行和实际的错误。 – 2010-07-31 07:19:33

回答

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是一个结构体。当你通过一个物业访问它时,你会得到一个副本,所以如果你改变副本,然后丢弃副本,你只需要丢失更改。

+0

我不知道微软是否认为这是一个错误或功能? 感谢您的信息。 – Ben 2010-07-31 07:43:50

1

您在这里遇到的问题是点类型是Value Type。所以,当你操纵Pointvect.X时,你实际上是在操纵值类型的临时副本,这当然对原始实例没有影响。