2013-06-28 18 views
19

L'istruzione using dispone sempre dell'oggetto, anche se è presente un ritorno o viene generata un'eccezione al suo interno? Cioè .:L'istruzione "using" dispone sempre dell'oggetto?

using (var myClassInstance = new MyClass()) 
{ 
    // ... 
    return; 
} 

o

using (var myClassInstance = new MyClass()) 
{ 
    // ... 
    throw new UnexplainedAndAnnoyingException(); 
} 

risposta

29

Sì, questo è il punto. Compilare fino a:

SomeDisposableType obj = new SomeDisposableType(); 
try 
{ 
    // use obj 
} 
finally 
{ 
    if (obj != null) 
     ((IDisposable)obj).Dispose(); 
} 

Fare attenzione alla terminologia qui; l'oggetto stesso non è deallocato. Viene chiamato il metodo Dispose() e, in genere, vengono rilasciate le risorse non gestite.

10

Se l'oggetto implementa IDisposable, si chiamerà.

Da using Statement (C# Reference)

Definisce un ambito, fuori del quale uno o più oggetti saranno smaltiti.

L'istruzione using consente al programmatore di specificare quando gli oggetti che utilizzano le risorse devono rilasciarli. L'oggetto fornito all'utilizzo della dichiarazione deve implementare l'interfaccia IDisposable. Questa interfaccia fornisce il metodo Dispose, che dovrebbe rilasciare le risorse dell'oggetto.

+0

+1 per notare che l'oggetto deve implementare 'IDisposable'. – Tim