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?

questionAnswers(6)

yourAnswerToTheQuestion