Duplicar posibles:
Should Usings be inside or outside the namespaceespacios de nombres de .NET y utilizando declaraciones
¿Cuál es la diferencia entre
namespace x
{
using y;
}
y
using y;
namespace x
{
}
?
Duplicar posibles:
Should Usings be inside or outside the namespaceespacios de nombres de .NET y utilizando declaraciones
¿Cuál es la diferencia entre
namespace x
{
using y;
}
y
using y;
namespace x
{
}
?
El primero tiene un alcance de y para el espacio de nombres x, el segundo tiene un alcance de y para todo el archivo, lo que potentialy otros espacios de nombres. Si te mantienes en un espacio de nombres por archivo (supongo que fue la convención) entonces generalmente no hay diferencia real [pero mira el comentario de Marc sobre los enfrentamientos si los diferentes tipos tienen el mismo nombre en diferentes espacios de nombres]. Si usa StyleCop, querrá que guarde los usos dentro del espacio de nombres.
Al poner la instrucción using
dentro del bloque namespace
, lo ubica en ese bloque. Esto afecta una cantidad de cosas.
using
sólo es válida dentro del bloque, por lo que si había otras namespace
bloques, que no se verían afectados.using
se puede acortar según el bloque externo namespace
. Por lo tanto, using x.y;
fuera del espacio de nombre solo se puede expresar como using y;
dentro del bloque namespace x
.using
dentro del espacio de nombres, el compilador garantiza que no se sobrescribe el espacio de nombres especificado. Por ejemplo: using Guid = System.Guid;
namespace Sample
{
public class Guid {}
public class Program
{
public static void Main()
{
Console.WriteLine(new Guid());
}
}
}
El código anterior se compilará, pero no está claro qué instancia de Guid
se está creando una instancia. Si la instrucción using
está dentro del bloque namespace
, sin embargo, se produce un error de compilación.Consulte the related StyleCop documentation para una discusión más completa.
+1. Caso de borde interesante allí. –
En realidad, me parece recordar que * puede * haber una diferencia ... * si * hay tipos conflictivos, etc. en diferentes niveles. –
Y como otra diferencia (más práctica) ... uno de ellos puede bloquear el generador de código LINQ-to-SQL, y uno no ;-p –
Buen punto Marc, editará. –