2013-08-12 16 views
5

가 울부 짖는 코드 확인 : 구현하기가 쉽고 명확하지 않을까요암시 적/명시 적 연산자를 사용해야하는 이유는 무엇입니까?

public static int returnIntValueFrom(Money money) 
{ 
    return (int)money.Amount; 
} 

: 나는 내 코드에서 유용 할 것이다 방법을 이해 해달라고

class Money 
{ 
    public Money(decimal amount) 
    { 
     Amount = amount; 
    } 

    public decimal Amount { get; set; } 

    public static implicit operator decimal(Money money) 
    { 
     return money.Amount; 
    } 

    public static explicit operator int(Money money) 
    { 
     return (int)money.Amount; 
    } 
} 

을, 난 그냥 같은 방법을 couldnt한다 ?

+5

코드에서'return (int) money.Amount;'와 같은 것을 쓸 수 있다고 생각합니까? – mbeckish

+0

Microsfot 교육 키트에있는 샘플입니다 (시험 참조 번호 70-483 C#, Wouter de Kort, O'Reilly, 2013 년판 (쪽 110 작성 및 사용 유형)) –

+0

@WilnerAvila - 20 번에 도달하면 평판, 당신은 항상 [C# 대화방] (http://chat.stackoverflow.com/rooms/7/c)에서 이러한 유형의 "이해할 수 없다"라는 질문을 할 수 있습니다. 그것은 SO보다 빠른 설명을위한 더 나은 형식입니다. –

답변

5

이것은 다른 돈에 돈을 추가 할 수 있도록하기 위해 수행됩니다. 코드의 조각이 없다면,이 컴파일러 오류가 발생합니다, "운영자 '는 +'유형 '돈'과 'INT'의 피연산자에 적용 할 수 없습니다"현재 캐스팅 연산자와

Money money = new Money(5.35m); 
decimal net = money + 6; 

는 이러한 유형의 수 있습니다 예외를 발생시키지 않고 변환을 수행 할 수 있습니다. 가독성을 높이고 다른 통화가 자신의 유형의 형변환을 구현할 수있는 다형성을 허용 할 수 있습니다.

+0

주요 포인트가 맞으면 컴파일 타임 오류를 참조하지 않는 한 실제로 예외가 발생하지 않습니다. –

+0

@ 500-InternalServerError - 정확합니다. 컴파일 시간 오류로 내 대답을 편집합니다. –

+0

이것은 굉장합니다, 암묵적인 캐스트 연산자가 당신이 이런 종류의 일을하도록 허락 한 적이 전혀 없었습니다. – McGarnagle