Al final del bloque (marcador1), en su ejemplo, solo se eliminará el objeto 1. En el caso de una secuencia de archivos, esto significa que la secuencia se cerrará y se liberará el identificador, pero el objeto de cadena real seguirá estando en la memoria (listo para ser limpiado por el GC). En su caso, Object2 no se eliminará, por lo que el controlador que utiliza se mantendrá abierto. Eventualmente, el GC lo recogerá y llamará a su finalizador, momento en el que se publicará correctamente.
Si desea que ambos objetos se "limpien" correctamente, ambos deberán eliminarse, ya sea envolviéndolos en instrucciones de uso o llamando a Dispose manualmente.
Existe la alternativa, la sintaxis potencialmente más limpia, así:
using (Object1 obj1 = new Object1(), Object2 obj2 = new Object2())
{
// Do something with obj1 & obj2
}
Si hace esto, obj1 Y obj2 ambos serán dispuestos en el extremo del bloque. En su caso, esto significa que ambos objetos se cerrarán y se liberarán sus identificadores. El GC los limpiará en una futura recolección de basura.
Para más detalles, véase MSDN's page on using.
Mientras estamos en ello - Will Object1 ser destruidos tan pronto como estamos en marca páginas 1 o solo ser no hace referencia a la espera de la GC a aparecer? – cwap
Será "fuera de alcance" (que es lo mismo que sin referencia) y simplemente espere a que el GC aparezca y limpie en algún momento más tarde –
[Vea una pregunta similar aquí.] (Http: // stackoverflow .com/questions/212198/what-is-the-c-using-block-and-why-should-i-use-it/212210 # 212210) – plinth