Ste*_*eve 15

第一个只有命名空间x的范围是y,第二个在整个文件的范围内有y,所以潜在的其他命名空间.如果你保持每个文件一个命名空间(我猜这是惯例)那么通常没有真正的区别[但是如果不同的类型在不同的命名空间中具有相同的名称,请参阅Marc关于冲突的评论].如果使用StyleCop,它会要求您将命令保留在命名空间内.


bdu*_*kes 7

using语句放在namespace块中将其范围限定为该块.这会影响许多事情.

  1. 正如@Steve Haigh所提到的,该using语句仅在块内有效,因此如果有其他namespace块,它们将不会受到影响.
  2. using可以基于外部namespace块缩短由此指定的命名空间.因此using x.y;,命名空间之外只能表示为块using y;内部namespace x.
  3. 放置using命名空间的内部会导致编译器保证不会覆盖指定的命名空间.例如:
        using Guid = System.Guid;
        namespace Sample
        {
            public class Guid {}
            public class Program
            {
                public static void Main()
                {
                    Console.WriteLine(new Guid());
                }
            }
        }
    Run Code Online (Sandbox Code Playgroud) 上面的代码将编译,但不清楚哪个Guid是实例化的.但是,如果using语句在namespace块内,则抛出编译器错误.

有关更完整的讨论,请参阅相关的StyleCop文档.