2009-11-20 2 views
3

내 UI 클래스에서 개발자는 위치 속성 (System.Drawing.Point 형식)을 정의 할 수있는 옵션을 제공합니다. 기본적으로이 속성은 Point.Empty로 초기화됩니다. 클래스에 의해 캡슐화 된 내부 코드는 Point 속성의 .IsEmpty를 사용하여 위치가 설정되었는지 확인합니다. 속성이 비어 있지 않으면 x/y 값이 사용됩니다. 비어있는 경우 코드는 행/열 algorythm과 함께 배치하려고합니다..NET Point.IsEmpty 대 IsDefined

내 호 :
속성의 .IsEmpty를 사용하여 설정했는지 확인합니다. 놀랍게도 개발자가 속성을 0,0으로 설정하면 빈 상태로 나타납니다. 0,0 점은 그래픽에서 유효합니다. 또한 .IsEmpty가 0,0 값에 대해 true를 반환하는 이유를 이해합니다.

1) 내 자신의 클래스를 만들거나 System.Drawing.Point에서 상속하지 않으면 속성이 설정되었는지 알 수있는 방법이 있습니까?

내가 생각할 수있는 유일한 생각은 "new Point (-1, -1)"값으로 속성을 기본값으로 설정하고 테스트하는 것입니다. 더 좋은 방법이 있습니까? 그렇지 않은 경우 확인하십시오.

나는 Visual Studio 2005 및 Visual Studio 2008

덕분에 C#을 사용하고 있습니다!

답변

5

몇 가지 방법이있다 : 아무것도 setter 메소드에 의해 호출 여부를

  1. 당신이 그것을
  2. 트랙을 설정하지 않은 경우 널 (NULL) 포인트, 이런 식으로, 그것은 "널 (null)"입니다 속성을 확인 전용 부울 필드를 참으로 설정하십시오.

예. 다음 중 하나를

public Point? Location { ... } 

나 : System.Drawing.Point :

public Point Location 
{ 
    get ... 
    set 
    { 
     _LocationSet = true; 
     _Location = value; 
    } 
} 
+0

Null 가능 유형에는 이미 "HasValue"및 "Value"라는 두 가지 속성이있어서 자신을 정의 할 필요가 없습니다. –

+0

네, 저도 요점은 자신의 속성을 정의하는 것이 더 번거롭고 nullable 유형이 제공하는 것 이상으로 실제 가치를 추가하지 않는다는 것입니다. Null 허용 유형을 고수하십시오. –

+0

이 값은 자신의 내부 값에 따라 값을 "설정 해제"할 수 없습니다. 그것은 사람이 원하는 것에 달려 있습니다. –

2

Point 대신 Point? (구문 설탕은 Nullable<Point>)으로 유지하십시오. 기본적으로 값이 "실제 값"인지 "null 값인지 여부를 추적합니다. 속성을 공개하는 방법은 당신에게 달려 있습니다. 당신은 그것을 Point으로 드러 낼 수 있고 그것을 설정하지 않고 가져 오려고하면 예외를 던지거나, 설정에 의해 "unset"될 수있는 Point?으로 드러 낼 수 있습니다 나중에 다시 null이됩니다.

Nullable 값 유형은 이러한 상황에 맞게 정확하게 설계되었습니다.

+0

제안 된 변경을 시도했지만 다음 오류가 발생했습니다. 'System.Nullable '에 'X'에 대한 정의가 없습니다. 'Y'와 'IsEmpty'에 대해서도 같은 내용이보고됩니다. 내가 잘못하고있는 것에 대한 아이디어가 있습니까? – cbuck12000

+0

nevermind - 알아 냈어. 나는 좋다! – cbuck12000

+1

null 허용 유형을 사용하고 있으므로 "p.Value.X"를 사용해야합니다. –

1

가 나는 널 (NULL) 포인트를 사용하는 것이 좋습니다? Nullable 무언가가 설정되어 있는지 여부를 알기위한 더 깔끔한 경로를 제공합니다.