C# ha l'istruzione using
, in particolare per gli oggetti IDisposable. Presumibilmente, qualsiasi oggetto specificato nell'istruzione using
conserverà una sorta di risorsa che dovrebbe essere liberata in modo deterministico.Cattive abitudini? L'utilizzo non canonico di C# utilizzando la dichiarazione
Tuttavia, mi sembra che ci siano molti progetti in programmazione che hanno un inizio e una fine singoli, definiti, ma mancano di un supporto linguistico intrinseco. Il costrutto using
offre l'opportunità di utilizzare le funzionalità incorporate di un editor di codice per, almeno, evidenziare chiaramente e naturalmente l'ambito di tale progetto o operazione.
Quello che ho in mente è il tipo di operazione che inizia spesso con un metodo BeginXXX()
e EndXXX()
, anche se ci sono un sacco di sapori diversi, come ad esempio l'esecuzione di codice asincrono che coinvolge una "start" e di una "join".
Prendi questo esempio ingenuo.
webDataOperation.Start();
GetContentFromHardDrive();
webDataOperation.Join();
// Perform operation that requires data from both sources
Che cosa succede se, invece, il metodo Start restituito un oggetto la cui IDisposable.Dispose
metodo esegue l'operazione di join.
using(webDataOperation.Start()) {
GetContentFromHardDrive();
}
// Perform operation that requires data from both sources
O, meglio ancora, quello che ho espressamente avevo in mente: ho un oggetto che fa la grafica altamente specializzati copiarlo sul video e ha un metodo di Begin()
e End()
(un disegno presente anche in DirectX e XNA). Invece ...
using(blitter.BlitOperation()) {
// Do work
}
// Use result
Sembra essere più naturale e leggibile, ma è sconsigliabile, visto che utilizza l'interfaccia IDisposable
e la using
dichiarazione a fini non intenzionali? In altre parole, questo sarebbe alla pari con o verloading un operatore in modo non intuitivo?
Perché non usare solo {all'inizio e} alla fine? Questo fornisce l'ambito senza abusare dell'uso. – cja