L’istruzione using in C# permette di abbreviare e semplificare la scrittura di un costrutto try/finally per oggetti che implementano l’interfaccia IDisposable e invocarne automaticamente il metodo Dispose al termine del blocco definito dall’istruzione stessa.
Il seguente esempio apre un file con un oggetto StreamReader, ne legge il contenuto e poi chiama il metodo Dispose al termine del suo utilizzo:
StreamReader sr; try { sr=File.OpenText(path); string content = sr.ReadToEnd(); } finally { if(sr!=null) sr.Dispose(); }
L’esempio è perfettamente identico al seguente:
using(StreamReader stream = File.OpenText(path)) { string content = stream.ReadToEnd(); }
Una volta raggiunta la parentesi di chiusura del blocco using, viene invocato implicitamente il metodo Dispose dell’oggetto istanziato con l’istruzione using.
C# 8.0 ha introdotto una sintassi più breve, introducendo le using declaration, allo scopo di dichiarare le variabili da sottoporre al Dispose.
L’esempio precedente può ora essere riscritto come segue:
using StreamReader stream = File.OpenText(path); string content = stream.ReadToEnd();
In questa maniera sono richiesti meno blocchi, parentesi graffe e meno indentazioni. La dichiarazione using su una variabile, in questo caso stream, indica che sulla variabile stessa sarà invocato il metodo Dispose al termine del suo utilizzo, in genere all’uscita del suo ambito di utilizzo.
In attesa di Programmare con C# 8 Guida Completa
questo e altro nella prossima edizione del libro, in uscita fra pochi mesi.