Cosa significa questa affermazione in C#?Cosa significa usare (oggetto obj = new Object())?
using (object obj = new object())
{
//random stuff
}
Cosa significa questa affermazione in C#?Cosa significa usare (oggetto obj = new Object())?
using (object obj = new object())
{
//random stuff
}
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();
}
}
}
using (object obj = new object())
{
//random stuff
}
equivale a:
object obj = new object();
try
{
// random stuff
}
finally {
((IDisposable)obj).Dispose();
}
Quasi equivalente. Nel primo campione obj è fuori ambito nel}. Nel secondo, è ancora in ambito. Simile all'equivalenza for-while. –
è 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
using
assicura che l'oggetto allocato sia correttamente disposto dopo il blocco using, anche quando si verifica un'eccezione non gestita nel blocco.
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, ....
È zucchero sintattico –
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
Per riferimento futuro, questo è documentato nella sezione 8.13 delle specifiche C#. –