Eventuali duplicati:
Should Usings be inside or outside the namespacenamespace .NET e utilizzando le istruzioni
Qual è la differenza tra
namespace x
{
using y;
}
e
using y;
namespace x
{
}
?
Eventuali duplicati:
Should Usings be inside or outside the namespacenamespace .NET e utilizzando le istruzioni
Qual è la differenza tra
namespace x
{
using y;
}
e
using y;
namespace x
{
}
?
Il primo ha y nella portata solo per lo spazio dei nomi x, il secondo ha y in ambito per l'intero file, quindi potentiamente altri spazi dei nomi. Se si mantiene uno spazio dei nomi per file (suppongo che fosse la convenzione), c'è in genere senza alcuna differenza reale [ma si veda il commento di Marc sulle collisioni se diversi tipi hanno lo stesso nome in spazi dei nomi diversi]. Se usi StyleCop, vorrai che tu mantenga gli usi all'interno dello spazio dei nomi.
Mettere l'istruzione using
all'interno del blocco namespace
lo scopre su quel blocco. Questo riguarda un certo numero di cose.
using
è valido solo all'interno del blocco, quindi se ci fossero altri namespace
blocchi, essi non sarebbero interessate.using
può essere abbreviato in base al blocco namespace
esterno. Quindi using x.y;
al di fuori dello spazio dei nomi può essere espresso come using y;
all'interno del blocco namespace x
.using
all'interno dello spazio dei nomi, il compilatore garantisce che lo spazio dei nomi specificato non venga sovrascritto. Ad esempio: using Guid = System.Guid;
namespace Sample
{
public class Guid {}
public class Program
{
public static void Main()
{
Console.WriteLine(new Guid());
}
}
}
Il codice sopra verrà compilato, ma non è chiaro quale Guid
viene istanziato. Se l'istruzione using
si trova all'interno del blocco namespace
, tuttavia, viene generato un errore del compilatore.Vedere the related StyleCop documentation per una discussione più completa.
+1. Caso limite interessante lì. –
In realtà, mi sembra di ricordare che * può * essere una differenza ... * se * ci sono tipi in conflitto ecc. A diversi livelli. –
E come un'altra (più pratica) differenza ... uno di essi può bloccare il generatore di codice LINQ-to-SQL e uno non lo fa ;-p –
Un buon punto Marc, verrà modificato. –