Mau prática? Uso não-canônico de c # usando instrução
C # tem ousing
declaração, especificamente para objetos IDisposable. Presumivelmente, qualquer objeto especificado nousing
A declaração conterá algum tipo de recurso que deve ser liberado deterministicamente.
No entanto, parece-me que existem muitos projetos em programação que têm um início e um fim únicos e definidos, mas carecem de suporte intrínseco à linguagem. ousing
O construct fornece uma oportunidade de usar os recursos internos de um editor de código para, pelo menos, destacar clara e naturalmente o escopo de tal projeto ou operação.
O que tenho em mente é o tipo de operação que freqüentemente começa com umBeginXXX()
eEndXXX()
método, embora existam muitos sabores diferentes, como uma execução de código assíncrona que envolve um "start" e um "join".
Tome este exemplo ingênuo.
webDataOperation.Start();
GetContentFromHardDrive();
webDataOperation.Join();
// Perform operation that requires data from both sources
E se, em vez disso, o método Start retornasse um objeto cujoIDisposable.Dispose
método executa a operação de junção.
using(webDataOperation.Start()) {
GetContentFromHardDrive();
}
// Perform operation that requires data from both sources
Ou, melhor ainda, o que eu tinha especificamente em mente: eu tenho um objeto que faz grafite altamente especializado e tem umBegin()
eEnd()
método (um projeto também presente em DirectX e XNA). Em vez de...
using(blitter.BlitOperation()) {
// Do work
}
// Use result
Parece ser mais natural e legível, mas é desaconselhável, já que usa oIDisposable
interface e ousing
declaração para fins não intencionais? Em outras palavras, isso seria a par com overificando um operador de maneira não intuitiva?