2011-12-02 18 views
6

Mucha gente en SO señaló que debería usar la declaración using con más frecuencia. Entonces estoy practicando.¿Cuándo se debe usar la instrucción Using?

El problema es que no puedo decidir cuándo usarlo y cuándo no usarlo. Cuando pienso que debería usarlo, entonces consigo errores como en este ejemplo (Sal. HashPhrase es una clase creada por mí):

 using (HashPhrase hash = new HashPhrase()) 
     { 
      connection.ConnectionString = 
       "Provider=Microsoft.ACE.OLEDB.12.0;" + 
       "Data Source=" + filePath + ";" + 
       "Persist Security Info=False;" + 
       "Jet OLEDB:Database Password=" + hash.ShortHash(pass) + ";"; 
     } 

Pero me da un error: 'Password_Manager.HashPhrase': type used in a using statement must be implicitly convertible to 'System.IDisposable'

Pero en este ejemplo funciona bien:

using (OleDbConnection connection = new OleDbConnection()) 
    { 
     connection.ConnectionString = 
      "Provider=Microsoft.ACE.OLEDB.12.0;" + 
      "Data Source=" + filePath + ";" + 
      "Persist Security Info=False;" + 
      "Jet OLEDB:Database Password=" + hash.ShortHash(pass) + ";"; 

     using (OleDbCommand command = new OleDbCommand(sql, connection)) 
     { 
      try 
      { 
       connection.Open(); 
       command.ExecuteNonQuery(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Error: " + ex.Message); 
      } 
     } 
    } 

¿hay alguna guía de manera rápida cómo determinar cuándo se debe utilizar using declaración?

Respuesta

14

Su pregunta ya se refiere a la respuesta.

Si el tipo implementa la interfaz IDisposable, debe apuntar a usar using siempre que sea posible (es decir, siempre, a menos que exista un motivo convincente para no hacerlo).

Y si el tipo no implementa IDisposable, entonces no puede usar using, y el compilador se lo dirá, como ya lo ha descubierto.

+0

Eso tiene sentido. – HelpNeeder

+1

@downvoter: ¿Te importaría explicar tus razones para el voto a favor? – LukeH

4

Debe usar una instrucción using siempre que la clase implemente la interfaz IDisposable.

Es una abreviatura para envolver el objeto en un bloque try-finally para garantizar que siempre se llame al método Dispose del objeto para liberar recursos, independientemente de si se produce una excepción.

Para verificar, haga clic con el botón derecho en el nombre de la clase en Visual Studio y seleccione Vaya a la declaración para abrirlo en el Examinador de objetos. Luego puede verificar fácilmente si la clase o sus tipos básicos implementan IDisposable.

+0

+1 como referencia :) – HelpNeeder

4

En

using (var r = new R()) 
{ 
    // use r 
} 

la clase R debe implementar la interfaz IDisposing.

2

La manera más fácil es ver si el objeto implementa la interfaz IDisposable. Por lo tanto, haga clic con el botón derecho en el objeto/clase en cuestión, seleccione Ir a definición en el menú desplegable (o presione F12) y vea si la clase implementa IDisposable. Tenga en cuenta que, en una clase que implementa muchas interfaces/otras clases, es posible que necesite verificar esas clases para ver si implementan IDisposable también.

Cuestiones relacionadas