En C#, si quiero depurar de manera determinista los recursos no gestionados, puedo usar la palabra clave "using". Pero para los objetos dependientes múltiples, esto termina anidación más y más:¿Existe un mejor patrón de disposición determinista que el "uso" s anidado?
using (FileStream fs = new FileStream("c:\file.txt", FileMode.Open))
{
using (BufferedStream bs = new BufferedStream(fs))
{
using (StreamReader sr = new StreamReader(bs))
{
// use sr, and have everything cleaned up when done.
}
}
}
En C++, estoy acostumbrado a ser capaz de utilizar los destructores de hacerlo de esta manera:
{
FileStream fs("c:\file.txt", FileMode.Open);
BufferedStream bs(fs);
StreamReader sr(bs);
// use sr, and have everything cleaned up when done.
}
¿Hay una mejor manera en C# para hacer esto? ¿O estoy atrapado con los múltiples niveles de anidación?
Eso está anidado: cada uso sucesivo se trata como un bloque de código de una línea; piense en una sentencia if, sans {}. Todo lo que ha ganado aquí es evitar presionar la tecla TAB. –
Estoy de acuerdo con Greg Hurlman, es un truco de formateo: como si, mientras, etc, 'using' controla una sola instrucción, pero normalmente la usas con un bloque de instrucciones. –
Bueno, sí, es un truco de formateo, pero el punto es que es un truco útil, y no obvio para alguien nuevo en C#. – Eclipse