2010-07-31 78 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時,你實際上是在操縱值類型的臨時副本,這當然對原始實例沒有影響。