2010-07-31 1 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

해당 오류를 생성하는 코드를 표시하십시오. –

+0

@Bob : 돋보기가 도움이되었다고 생각한다면, 그렇지 않았습니다. 실제 코드 줄과 실제 오류를 확인해야합니다. –

답변

2

변경 가능한 구조체가 악의 인 또 다른 이유. 한 가지 해결 방법은 편의를 위해 접근 자로 차원을 표시하는 것입니다.

public Point PublicX { 
    get {return _PrivateVect.X;} 
    set {_PrivateVect.X = value;} 
} 
public Point PublicY { 
    get {return _PrivateVect.Y;} 
    set {_PrivateVect.Y = value;} 
} 

Point은 구조체이므로 매번 new Point(x,y)을 수행해야합니다. 속성을 통해 액세스 할 때 복사본이 표시되므로 복사본을 변경 한 다음 복사본을 변경하면 복사본이 변경되면 변경 내용이 손실됩니다.

+0

Microsoft가 버그 또는 기능으로 간주합니까? 정보를 제공해 주셔서 감사합니다. – Ben

1

문제는 포인트 유형이 Value Type입니다. 따라서 Pointvect.X를 조작 할 때 값 유형의 임시 복사본을 실제로 조작하고 있습니다. 원래 인스턴스에는 아무런 영향을 미치지 않습니다.