Possible en double:
Should Usings be inside or outside the namespacenamespaces .NET et en utilisant des instructions
Quelle est la différence entre
namespace x
{
using y;
}
et
using y;
namespace x
{
}
?
Possible en double:
Should Usings be inside or outside the namespacenamespaces .NET et en utilisant des instructions
Quelle est la différence entre
namespace x
{
using y;
}
et
using y;
namespace x
{
}
?
Le premier a la portée de l'espace de noms x, le second a la portée de l'ensemble du fichier, donc potentiellement d'autres espaces de noms. Si vous gardez un espace de noms par fichier (je suppose que c'était la convention), il n'y a généralement aucune différence réelle [mais voir le commentaire de Marc sur les conflits si différents types ont le même nom dans différents espaces de noms]. Si vous utilisez StyleCop, il vous faudra conserver les utilisations à l'intérieur de l'espace de noms.
En mettant l'instruction using
à l'intérieur du bloc namespace
l'étend à ce bloc. Cela affecte un certain nombre de choses.
using
est valable uniquement dans le bloc, donc s'il y avait d'autres namespace
blocs, ils ne seraient pas touchés.using
peut être raccourci en fonction du bloc externe namespace
. Donc using x.y;
en dehors de l'espace de noms peut être simplement exprimé comme using y;
à l'intérieur du bloc namespace x
.using
à l'intérieur de l'espace de noms, le compilateur garantit que l'espace de noms spécifié n'est pas remplacé. Par exemple: using Guid = System.Guid;
namespace Sample
{
public class Guid {}
public class Program
{
public static void Main()
{
Console.WriteLine(new Guid());
}
}
}
Le code ci-dessus va compiler, mais il n'est pas clair lequel Guid
est instancié. Si l'instruction using
se trouve à l'intérieur du bloc namespace
, une erreur de compilation est toutefois générée.Voir the related StyleCop documentation pour une discussion plus complète.
+1. Cas de bord intéressant là-bas. –
En fait, il me semble me rappeler qu'il peut y avoir * une différence * ... * s'il y a des types contradictoires, etc., à différents niveaux. –
Et comme une autre différence (plus pratique) ... l'un d'eux peut planter le générateur de code LINQ-to-SQL, et on ne le fait pas ;-p –
Bon point Marc, éditera. –