2010-01-12 15 views

risposta

13

Ciò significa che obj implementa IDisposible e saranno smaltiti correttamente dopo il blocco using. È la stessa funzione:

{ 
    //Assumes SomeObject implements IDisposable 
    SomeObject obj = new SomeObject(); 
    try 
    { 
    // Do more stuff here.  
    } 
    finally 
    { 
    if (obj != null) 
    { 
     ((IDisposable)obj).Dispose(); 
    } 
    } 
} 
+0

oh! Bello! Grazie per la risposta. – Ricardo

+2

Quasi a destra, usare() non implica un'istruzione catch, solo prova/finalmente. – Turnor

+0

@Jay Zeng, come nella grafica? Se uso la mia grafica all'interno di una frase "using" non ho bisogno di disporre? – Ricardo

5
using (object obj = new object()) 
{ 
    //random stuff 
} 

equivale a:

object obj = new object(); 
try 
{ 
    // random stuff 
} 
finally { 
    ((IDisposable)obj).Dispose(); 
} 
+0

Quasi equivalente. Nel primo campione obj è fuori ambito nel}. Nel secondo, è ancora in ambito. Simile all'equivalenza for-while. –

0

è un modo per ambito un oggetto in modo che il metodo dispose viene chiamato in uscita. È molto utile per le connessioni al database in particolare. si verificherà un errore in fase di compilazione se l'oggetto non implementa idisposable

0

using assicura che l'oggetto allocato sia correttamente disposto dopo il blocco using, anche quando si verifica un'eccezione non gestita nel blocco.

1

perché esiste comunque.

Esiste per le classi in cui si preoccupa della loro durata, in particolare dove la classe avvolge una risorsa nel sistema operativo e si desidera rilasciarla immediatamente. Altrimenti dovresti aspettare i finalizzatori del CLR (non deterministico).

Esempi, handle di file, connessioni DB, connessioni socket, ....

+0

È zucchero sintattico –

+0

Non sono d'accordo - è un modello ben noto e incoraggia così le buone pratiche comuni. per ciclo è anche zucchero sintattico - ma è sempre usato perché è un idioma comune anche io stavo cercando di spiegare perché lo vedi usato - e perché vedresti la versione non zuccherata – pm100

Problemi correlati