2014-12-01 3 views
3

여러 가지 유형으로 속성을 설정하는 옵션이 필요하며 해결책을 찾기 위해 고심 중입니다. 이 가능 - 속성 설정자에서 여러 유형 가져 오기

public static PropertyType Property 
     { 
      get { return Property;} 
      set { 
       if (value.GetType() == typeof(PropertyType)) 
       { 
        Property = value;      
       } 

       //Or any other type 
       if (value.GetType() == typeof(string)) 
       { 
        Property = FunctionThatReturnsPropertyType(value); 
       } 
      } 
     } 

나는 나는 오직 하나 개의 유형으로 속성을 설정하고 있지만 다른 유형으로 할당 한 후 세터 내에서 변환 할 수 있도록하고 싶습니다, 그 말이 희망?

+2

일련의 과부하 된 SetProperty() 메소드는 훨씬 더 깨끗합니다. –

+0

@AlexK. 안녕! 나는 그 경로를 거의 거치지 않고 대신에 여러 가지 일반적인 변환 방법을 만들고 속성에 할당하기 전에 호출하기로 결정했습니다. 나중에 일반화되어 있기 때문에 나중에 사용할 수도 있습니다. 귀하의 제안에 감사드립니다! – user3768388

답변

3

원하는 디자인 오류가 있습니다. C# 속성의 setter와 getter는 항상 같은 유형입니다. 그래서 당신은 기본적으로 다음 선택 사항이 있습니다

  • 확인 재산 유형 object (또는 더 나쁜 디자인을 얻으려면 dynamic) 당신이 질문에 명시된대로와 세터 내에서 값을 변환 - 내가 강력하게이 문제를 방지하는 것이 좋습니다 접근.
  • property 개념에서 벗어나 별도의 메서드를 만들어 필드 값을 가져오고 다른 형식에서 할당합니다. 이 방법을 사용하면 getter-method가 올바르게 입력되는 동안 컴파일 타임에 유형을 알지 못하는 경우 값을 할당 할 수 있습니다. 하지만 일반적으로 여전히 나쁜 디자인처럼 보입니다.
  • 모든 변환을 속성 외부에서 수행하십시오. 이 솔루션이 좋습니다. 모든 별도의 경우에 어떤 유형을 사용할 지 알고 있어야합니다..
+1

안녕하세요! 저는 실제로 설계상의 오류라고 결론을 내 렸습니다. 속성이 개입되기 전에 변형 방법을 호출하는 것으로 끝났습니다. 귀하의 답변 주셔서 감사합니다! – user3768388

0

개체 유형으로 속성 유형을 시도하십시오.

public static Object PropertyName 
{ 
    get { return PropertyName; } 
    set { PropertyName = value; } 
} 
+4

모든 유형 안전을 잃어 버립니다. – CodeCaster