¿Cuáles son los usos de "usar" en C#?
El usuario kokos respondió a la maravillosa pregunta sobre las características ocultas de C# mencionando la using
palabra clave. Puedes profundizar sobre eso? ¿ Cuáles son los usos de using
?
El motivo de la using
declaración es garantizar que el objeto se elimine tan pronto como salga del alcance, y no requiere código explícito para garantizar que esto suceda.
Como en Comprensión de la declaración 'using' en C# (codeproject) y Uso de objetos que implementan IDisposable (microsoft) , el compilador de C# convierte
using (MyResource myRes = new MyResource())
{
myRes.DoSomething();
}
a
{ // Limits scope of myRes
MyResource myRes= new MyResource();
try
{
myRes.DoSomething();
}
finally
{
// Check for a null resource.
if (myRes != null)
// Call the object's Dispose method.
((IDisposable)myRes).Dispose();
}
}
C# 8 introduce una nueva sintaxis, denominada " usando declaraciones ":
Una declaración de uso es una declaración de variable precedida por la palabra clave de uso. Le dice al compilador que la variable que se declara debe eliminarse al final del alcance adjunto.
Entonces el código equivalente al anterior sería:
using var myRes = new MyResource();
myRes.DoSomething();
Y cuando el control sale del alcance que lo contiene (generalmente un método, pero también puede ser un bloque de código), myRes
será eliminado.
Como mucha gente todavía lo hace:
using (System.IO.StreamReader r = new System.IO.StreamReader(""))
using (System.IO.StreamReader r2 = new System.IO.StreamReader("")) {
//code
}
Supongo que mucha gente todavía no sabe que se puede hacer:
using (System.IO.StreamReader r = new System.IO.StreamReader(""), r2 = new System.IO.StreamReader("")) {
//code
}
Cosas como esta:
using (var conn = new SqlConnection("connection string"))
{
conn.Open();
// Execute SQL statement here on the connection you created
}
Esto SqlConnection
se cerrará sin necesidad de llamar explícitamente a la .Close()
función, y esto sucederá incluso si se lanza una excepción , sin necesidad de try
// .catch
finally
El uso se puede utilizar para llamar a IDisposable. También se puede utilizar para tipos de alias.
using (SqlConnection cnn = new SqlConnection()) { /* Code */}
using f1 = System.Windows.Forms.Form;