2011-10-29 2 views
1

예 : 위의 코드에서 속성 유형과 다른 유형을 설정하는 설정자가 있습니까?

[XmlAttribute("Type")] 
    public string DataTypeString 
    { 
     get 
     { 
      return _dataType.ToString(); 
     } 
     set 
     { 
      _dataType = Type.GetType(value); 
     } 
    } 

    private Type _dataType; 

    public Type DataType 
    { 
     get { return _dataType; } 
     set { _dataType = value; } 
    } 

, 첫 번째 속성 유형은 문자열, 그러나 세터 세트, System.Type

당신이 할 수 물론
+1

이것은 전체 속성이 아니며 기본 필드에서 추상화 수준을 제공합니다. – James

+4

하나의 속성에 2 명의 getter/setter가있는 것은 이상한 것처럼 보입니다. –

답변

0

인 _dataType이다. 이것이 부동산의 목적입니다. 부동산 사용자는 그 뒤에 무엇이 있는지 알 필요가 없습니다. 그/그녀는 단지 문자열을 설정하거나 가져옵니다. 그리고 그것은 그들이 알아야 할 모든 것입니다.

+0

글자를 찾을 수없는 경우 필드에 null 값이 할당 될 수 있습니다. 그것은 까다로운 버그로 이어질 수 있습니다. –

+0

@Kirk, 예외를 던지면 쉽게 고칠 수 있습니다. –

+1

@MatthewFlaschen 우리는 속성에 예외를 던지고 싶지 않다. – James

3

get 속성의 경우 종종 그렇게 할 수 있습니다.

설정 속성의 유형 변환은 더 논란의 여지가 있습니다. 일반적으로 속성은 예외를 throw하지 않고 가벼운 것으로 예상되며 x.YYY=newValue;x.YYY==newValue이 true가 될 것으로 예상됩니다. 유형 변환이 발생하면 달성하기 어려울 수 있습니다.

e.e. 귀하의 특정 예제에서 속성을 문자열로 유형을 설정할 수 있도록 허용하는 것은 나쁜 생각입니다 - 예상되는 동작은 x.DataTypeString="42";입니까? 당신은 내가 그 확인을 추측 ... 재산의 XML 직렬화를 활성화하는 다른 방법을 고려하는 것이

+0

그건 완전히 맞습니다. 그러나 이것이 속성을 사용하는 것이 좋은 것입니다. 그는 문자열이 속성 내부의 유효한 유형에 해당하는지 확인하여 할당 할 필요가있을 때마다 문자열을 외부에서 처리 할 필요가 없습니다. –

0

을 할 수 있습니다,하지만 난 그냥이, ​​어떤 적은 홀수 덜 장황을하는 것을 선호 :

public void SetDataType(string value) { 
     _dataType = Type.GetType(value); 
    } 

    public void SetDataType(Type value) { 
     _dataType = value; 
    } 

    public Type DataType { get; private set; } 

이미 언급했듯이 동일한 개인 변수에 대해 두 개의 getter/setter 쌍을 갖는 것은 다소 이상한 것 같습니다.

0

이 클래스의 목적을 모른 채 말하기는 어렵습니다. 그러나 일반적으로 동일한 백킹 필드가있는 두 개의 속성 (하나가 변경되면 다른 하나에 영향을 미침)을 사용하면 혼란 스럽습니다.

예외가 있습니다. 예를 들어 Circle 클래스에서는 Radius 속성과 Diameter 속성을 모두 갖게되는 것이 합리적입니다. 다시 한번, 여러분의 수업 목적에 따라 다릅니다.

또한 제공된 예에서는 DataTypeString 속성이 많은 이점을 제공하는 것처럼 보이지 않습니다. 당신이 그것을 제거하는 경우, 호출자는 단순히

foo.DataType = Type.GetType("System.Int32"); 

또는

string dataTypeString = foo.DataType.ToString() 

를 호출하여 동일한 효과를 얻을 수있다.

관련 문제