2010-08-11 13 views
14

mi è stata data una dichiarazione del campione:Intervista su C# implicita conversione

MyClass myclass = 3; 

Come è possibile per rendere questa una dichiarazione valida? Quale codice devo includere in MyClass per supportare la conversione implicita da un int?

+0

Questa in realtà è una buona domanda, deve essere modificata anche se –

+0

In che modo è correlato alla digitazione implicita? probabilmente intendi la conversione implicita –

+0

sì, la conversione implicita è meglio dire qui – Mike

risposta

19

È necessario un implicit conversion operator:

public class MyClass 
{ 
    private readonly int value; 
    public MyClass(int value) 
    { 
     this.value = value; 
    } 

    public static implicit operator MyClass(int value) 
    { 
     return new MyClass(value); 
    } 
} 

Personalmente non sono un grande fan di conversioni implicite maggior parte del tempo. A volte sono utili, ma pensaci bene prima di inserirli nel tuo codice. Possono essere piuttosto confusi quando leggi il codice.

D'altra parte, se usate in maniera attenta, possono essere incredibilmente a portata di mano - sto pensando in particolare delle conversioni string-XName e XNamespace in LINQ to XML.

+0

Stanno confondendo le classi per le sonde. Se usato coerentemente con le strutture immutabili, però, non è di fatto confuso, ma molto potente. 'FeetAndInches length =" 10 \ '- 3/16 \ "" 'E' abbastanza ovvio e non lascia spazio a domande su come funzioni –

+1

@Michael: In realtà lo fa. Cosa fa se la stringa di input è nullo? O vuoto? O contiene spazzatura? In ogni caso, lancia o restituisce un valore assurdo? Queste risposte non sono ovvie per chiunque legga il codice, quindi probabilmente non dovresti usare un operatore implicito lì. (Naturalmente, un l'operatore implicito che va nella direzione opposta sarebbe diverso, ma per questo c'è già il 'ToString().) – Timwi

+0

@Timwi Penso che ci sia spazio per congruenza per convenzione.Come mi piace assicurarmi che tutte le mie strutture abbiano uno stato non inizializzato' var feetAndInches = FeetAndInches.Empty'.Questo è anche il valore predefinito. Non è possibile assegnare null a una struttura, quindi non è un problema. Se assegni una variabile stringa nulla o altrimenti una stringa non rimarchiabile, allora genera un'eccezione di analisi. Se lo fai in modo coerente, non dovrebbe esserci confusione e il tuo codice diventa molto più leggibile. –

0

È possibile se MyClass ha una conversione implicita da int.

Using Conversion Operators

+1

Intendi "una conversione implicita * da *' int' ", giusto? – sepp2k

+0

@ sepp2k, giusto. –

-1

È necessario sovraccaricare l'operatore costruttore implicita:

public static implicit operator MyClass (int rhs) 
{ 
    MyClass c = new MyClass (rhs); 
    return c; 
} 
6

Ecco come:

public class MyClass 
{ 
    public static implicit operator MyClass(int i) 
    { 
     return new MyClass(i); 
    } 
} 

Questo utilizza funzione C# denominata implicit conversion operator.

0

Basta implementare un operatore di conversione implicit.

Problemi correlati