2011-08-03 14 views
5

Ésta es básicamente una pregunta tutorial para preguntar ya soy un principiante me gustaría lo que es una diferencia entre la instrucción using utilizamos en el arranque de nuestro código C# para incluir montaje y espacios de nombres¿Cuál es la diferencia entre la instrucción using y la directiva en C#?

así:

using System.Web.Services; 

y cuando escribimos dentro del código dentro del método o código. así:

using (SqlDataAdapter adapter = new SqlDataAdapter(cmd)) 

¿Hay alguna diferencia o que ambos son iguales, ninguna orientación sería útil y apreciado.

+2

Sorprendentemente difícil encontrar un duplicado para esta pregunta. – BoltClock

+1

La primera es la directiva ['using'] (http://msdn.microsoft.com/en-us/library/sf0df423.aspx) que le permite acceder a los tipos definidos en un espacio de nombre específico sin utilizar los nombres completos. El segundo es el ['using' statement] (http://msdn.microsoft.com/en-us/library/yh598w02.aspx) que le permite deshacerse fácilmente de los objetos desechables. –

+0

Tenga en cuenta que 'using namespace' es una" directiva que usa "en lugar de una declaración. Esto hace una diferencia cuando pasas de ser un principiante y te interesa la definición precisa (por ejemplo, en la especificación del idioma). – Richard

Respuesta

10

El first (Using Directive) es para poner un espacio de nombres en el alcance.

Este es, por ejemplo, para que pueda escribir

StringBuilder MyStringBuilder = new StringBuilder(); 

en lugar de

System.Text.StringBuilder MyStringBuilder = new System.Text.StringBuilder(); 

El second (Using Statement) uno es para el uso correcto (la creación y eliminación) un objeto que implementa la interfaz IDisposable .

Por ejemplo:

using (Font font1 = new Font("Arial", 10.0f)) 
{ 
    byte charset = font1.GdiCharSet; 
} 

Aquí, el tipo Font implementa IDisposable porque utiliza unmanaged resources que necesitan ser correctly disposed of cuando estamos no más largo usando el Font instancia (font1).

+0

Muchas gracias! – abhijit

+1

No hay necesidad de agradecer, aceptar una respuesta es lo suficientemente agradecido en este sitio. :) –

+0

'using' también se usa para usar explícitamente una' clase' o 'interface' cuando hay más de una' clase' o 'interface' con el mismo nombre en diferentes espacios de nombres. Al igual que 'mynamespace.TimeZone', por ejemplo, si está utilizando' namespace' the framework's 'TimeZone' y también' mynamespace' y necesita usar un objeto 'TimeZone', entonces tiene que hacer' using TimeZone = mynamespace.TimeZone' – Luiso

2

using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))

Este dispone mediante el objeto adaptador automáticamente una vez que el control abandona el bloque usando.

Esto es equivalente a la llamada

SqlDataAdapter adapter = new SqlDataAdapter(cmd) 
adapter.dispose(); 

Consulte la documentación oficial sobre esto: http://msdn.microsoft.com/en-us/library/yh598w02(v=vs.71).aspx

+0

Eso no es directamente equivalente. Más equivalente sería el uso de try/finally. –

+0

no, esto es equivalente a: try {SqlDataAdapter adapter = new SqlDataAdapter (cmd); } finally {adapter.dispose(); } – Falanwe

+0

Y es 'Dispose' con mayúscula D. – BoltClock

0

Son tan diferentes como usted puede conseguir.

El primero muestra la intención de usar cosas dentro de un espacio de nombres.

La segunda toma una referencia a un objeto desechable y se asegura de que se dispone, no importa lo que sucede (como la implementación de try/finally)

0

La primera le permite utilizar tipos que no están definidos en el código (dice el compilador donde encontrar el código que necesita referencia. REF: http://msdn.microsoft.com/en-us/library/sf0df423(v=VS.100).aspx

El segundo uso asegura que la memoria se libera al final del bloque de código, o en el caso de una excepción. REF: http://msdn.microsoft.com/en-us/library/yh598w02.aspx

Consulte los enlaces de arriba para obtener la documentación detallada de cada uno.

0

Estoy seguro de que alguien pasará una gran cantidad de tiempo respondiendo lo que equivale a una búsqueda en Google, pero aquí hay un par de enlaces para que comiences.

El using Statement (C# Reference) asegura que se llama Dispose incluso si se produce una excepción mientras se están llamando métodos al objeto.

Para permitir el uso de tipos en un espacio de nombres para que no tenga que calificar el uso de un tipo en ese espacio de nombres use using Directive (C# Reference).

Puede encontrar que MSDN es un gran recurso para pasar algún tiempo navegando.

Cuestiones relacionadas