2013-08-12 21 views
5

controllare il codice sotto:Perché dovrei usare un operatore implicito/esplicito?

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

Non capisco come sarebbe utile nel mio codice, couldnt ho solo fare un metodo come:

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

Non sarebbe più semplice e più chiaro da implementare ?

+5

Cosa pensi ti permetta di scrivere cose come 'return (int) money.Amount;' nel tuo codice? – mbeckish

+0

Questo è un esempio trovato su un kit di addestramento Microsfot, (Esame Ref 70-483 Programmazione in C#, Wouter de Kort, O'Reilly, 2013 (Pagina 110 CAPITOLO 2 Creare e utilizzare i tipi)) –

+0

@WilnerAvila - Una volta arrivati ​​a 20 reputazione, puoi sempre chiedere questo tipo di domande "Non capisco" nella [chat room C#] (http://chat.stackoverflow.com/rooms/7/c). È un formato migliore per le spiegazioni veloci di SO. –

risposta

5

Questo viene fatto per consentire l'aggiunta di denaro ad altri soldi. Senza questo pezzo di codice, questo potrebbe causare un errore di compilazione, "operatore '+' non può essere applicato a operandi di tipo 'Money' e 'int'"

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

Con l'operatore colata presente permette questi tipi di conversioni da effettuare senza generare un'eccezione. Può aiutare nella leggibilità e consentire il polimorfismo in cui diverse valute potrebbero implementare i propri tipi di cast, ad esempio.

+0

Anche se il tuo punto principale è corretto, non genererebbe un'eccezione, a meno che non si tratti di errori di compilazione. –

+0

@ 500-InternalServerError - Sei corretto, è stato un errore in fase di compilazione e modifico la mia risposta. –

+0

Questo è fantastico, non ho mai saputo che l'operatore implicito del cast ti ha permesso di fare questo genere di cose. – McGarnagle