¿Qué significa esta afirmación en C#?¿Qué significa usar (objeto obj = new Object())?
using (object obj = new object())
{
//random stuff
}
¿Qué significa esta afirmación en C#?¿Qué significa usar (objeto obj = new Object())?
using (object obj = new object())
{
//random stuff
}
Significa que obj
implementa IDisposible
y serán dispuestos adecuadamente de después del bloque using
. Es funcionalmente lo mismo que:
{
//Assumes SomeObject implements IDisposable
SomeObject obj = new SomeObject();
try
{
// Do more stuff here.
}
finally
{
if (obj != null)
{
((IDisposable)obj).Dispose();
}
}
}
using (object obj = new object())
{
//random stuff
}
es equivalente a:
object obj = new object();
try
{
// random stuff
}
finally {
((IDisposable)obj).Dispose();
}
Casi equivalente. En la primera muestra, obj está fuera del alcance en el}. En el segundo, todavía está en el alcance. Similar a la equivalencia for-while. –
es una manera de alcance de un objeto por lo que el método dispose se llama a la salida. Es muy útil para conexiones de bases de datos en particuler. se producirá un error de tiempo de compilación si el objeto no implementa el
using
garantiza que el objeto asignado se elimina correctamente después del bloque de uso, incluso cuando se produce una excepción no controlada en el bloque.
por qué existe tho.
Existe para las clases en las que se preocupa por su vida útil, en particular cuando la clase envuelve un recurso en el sistema operativo y desea liberarlo inmediatamente. De lo contrario, tendrías que esperar a los finalizadores del CLR (no deterministas).
ejemplos, manipuladores de archivos, conexiones de base de datos, conexiones de socket, ....
Es azúcar sintáctico –
en desacuerdo - es un patrón bien conocido y por lo tanto fomenta la buena práctica común. para el bucle también es azúcar sintáctica, pero siempre se utiliza porque es una expresión común también estaba tratando de explicar por qué lo ves usado - y por qué verías la versión no azucarada – pm100
Para su referencia en el futuro, esto se documenta en la sección 8.13 de la especificación de C#. –