2013-08-12 11 views
5

Sprawdź kod poniżej:Dlaczego powinienem używać niejawnego/jawnego operatora?

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; 
    } 
} 

ja nie rozumiem, jak byłoby w moim kodu, kulisy i po prostu robić metody takie jak:

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

Czy nie byłoby łatwiej i wyraźniej do wdrożenia ?

+5

Co myślisz, że możesz napisać takie rzeczy jak 'return (int) money.Amount;' in your code? – mbeckish

+0

To jest próbka znaleziona w zestawie treningowym Microsfot (Egzamin 70-483 Programowanie w języku C#, Wouter de Kort, O'Reilly, 2013 (strona 110 ROZDZIAŁ 2 Tworzenie i używanie typów)) –

+0

@WilnerAvila - Gdy dojdziesz do 20 reputacja, możesz zawsze zadawać pytania typu "Nie rozumiem" w [C# chat room] (http://chat.stackoverflow.com/rooms/7/c). Jest to lepszy format dla szybkich wyjaśnień niż SO. –

Odpowiedz

5

Ma to na celu umożliwienie dodania pieniędzy do innych pieniędzy. Bez tego kawałka kodu, spowodowałoby to błąd kompilatora, „Operator«+»nie mogą być stosowane do argumentów typu«pieniądze»i«int»”

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

z operatorem odlewania obecnego pozwala te typy Konwersje należy przeprowadzać bez wyrzucania wyjątku. Może pomóc w czytelności i umożliwić polimorfizm, w którym różne waluty mogą np. Realizować własne typy rzutów.

+0

Podczas gdy twój główny punkt jest poprawny, to nie wyrzuciłby wyjątku, chyba że w ten sposób odnosisz się do błędów podczas kompilacji. –

+0

@ 500-InternalServerError - Masz rację, to był błąd podczas kompilacji i będę edytować moją odpowiedź. –

+0

To jest niesamowite, nigdy nie wiedziałem, że niejawny operator obsady pozwala ci robić takie rzeczy. – McGarnagle

Powiązane problemy