堆栈命名空间不能像任何其他元素一样被引用?

时间:2014-11-04 18:54:41

标签: c# inheritance

所以这里是一个片段,我在另一个内部的一个命名空间(B在A里面)。 通常在您使用SpaceA时使用;'您无需键入SpaceA即可访问所有元素。 这是A类的情况,但是我不能在不必键入SpaceA.SpaceB的情况下看到SpaceB。为什么是这样? 这是代码:

using System;

using SpaceA;

namespace SpaceA
{
    class A
    {
        public A()
        {
            Console.WriteLine("A");
        }
    }

    namespace SpaceB
    {
        public class B
        {
            public B()
            {
                Console.WriteLine("B");
            }
        }
    }
}

namespace TestingCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            //This does not work
            SpaceB.B x = new SpaceB.B();

            //This does work
            SpaceA.SpaceB.B y = new SpaceA.SpaceB.B();
        }
    }
}

1 个答案:

答案 0 :(得分:2)

  

通常当您使用'使用SpaceA;'时您无需键入SpaceA即可访问所有元素。

SpaceA成员的直接类型。永远不会使用普通namespace-or-type-name指令中的命名空间和名称中的另一个“子名称空间”来解析using。请注意,这与声明类型的方式无关(就嵌套命名空间声明或namespace SpaceA.SpaceB而言) - 另一个例子是:

using System;

...
Xml.Linq.XElement x = null; // Invalid

有关如何解析名称的详细信息,请参阅C#5规范的第3.8节。

轻微的区别在于,如果您对命名空间使用alias指令,那么可以用于查找其他命名空间

using X = System.Xml;
...
X.Linq.XElement x = null; // Valid