Si usted vino a través de un código C# como este con anidadas utilizando declaraciones/recursos:.NET - Sustitución anidada utilizando declaraciones con una sola instrucción using
using (var response = (HttpWebResponse)request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
using (var reader = new BinaryReader(responseStream))
{
// do something with reader
}
}
}
¿Es seguro para reemplazarlo con algo como esto?
using (var reader = new BinaryReader(((HttpWebResponse)request.GetResponse()).GetResponseStream()))
{
// do something with reader
}
El ejemplo anterior es sólo un ejemplo de los recursos anidados desechables, así que perdónenme si no es exactamente correcto uso. Tengo curiosidad por saber cuándo desechar el recurso más externo (el BinaryReader en este caso), si se deshace recursivamente de sus hijos, o si necesita disponer explícitamente de cada "capa" con instrucciones de uso separadas. P.ej. si dispone del BinaryReader, ¿se supone que debe eliminar el flujo de respuesta, que a su vez elimina la respuesta? Pensando en la última oración me hace pensar que en realidad necesitas las instrucciones de uso separadas, porque no hay forma de garantizar que un objeto envoltorio elimine el objeto interno. ¿Está bien?
Las necesita, pero no creo que necesiten anidarse. Creo que pueden apilarse uno encima del otro. –
@Matt: Sí, pero deben existir los tres. –
'BinaryReader.Close' cierra la secuencia subyacente. Y como 'Stream.Close' termina llamando' Stream.Dispose', no hay necesidad de cerrar la secuencia después de cerrar el lector. Consulte http://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.aspx y http://msdn.microsoft.com/en-us/library/system.io.stream.close.aspx . –