2008-10-14 3 views
14

난 그냥 당신이 C#에서 할 수있는 것으로 나타났습니다 :C# : 어떻게 작동합니까? Unit myUnit = 5;

이 일을하는 대신 :

Unit myUnit = new Unit(5); 

누구도 어떻게 내 구조체와 함께 이것을 달성 할 수 있습니까? 리플렉터가있는 Unit 구조체를 살펴본 결과 TypeConverter 특성이 사용되고 있음을 알았지 만 구조체에 대한 사용자 지정 TypeConverter를 만든 후에도 여전히이 편리한 구문을 허용하도록 컴파일러를 얻을 수 없었습니다.

답변

31

당신은, 단위에 INT에서 암시 적 변환 연산자를 제공과 같이해야합니다

public struct Unit 
    { // the conversion operator... 
     public static implicit operator Unit(int value) 
     { 
      return new Unit(value); 
     } 
     // the boring stuff... 
     private readonly int value; 
     public int Value { get { return value; } } 
     public Unit(int value) { this.value = value; } 
    } 
+0

우 항상 새로운 것들 배우기 - 나는 결코 전에 이것을 보지 못했다고 믿을 수 없다. – cbp

+0

"명시 적"캐스트도있다. 똑같이 작동하지만 호출자는 (유닛)을 추가해야한다. 데이터 손실의 위험이있을 때 일반적으로 사용됨 (정밀도/범위/스케일/등 - 예 : float => int) –

+0

연산자를 오버로딩하는 것은 매우 강력하지만 그렇게 할 때 가볍게 트레드합니다. 유지 보수 프로그래머에게는 매우 예측할 수 없습니다. 적절할 때 (예 : 유닛 케이스) 사용하지만 과용하지 마십시오. (그리고 항상 잘 문서화되어 있는지 확인하십시오!) –

2

Int32를 사용하는 클래스에 대해 형 변환 연산자를 제공해야합니다.

+0

마이너 수정 : 실제로 _conversion_ 연산자 (는 MS 사양에 10.10.3 참조) –

관련 문제