堆叠命名空间可以';不能像任何其他元素一样被引用

本文关键字:元素 其他 引用 一样 任何 命名空间 不能 | 更新日期: 2023-09-27 18:29:01

所以这里是我做的一个片段,其中一个命名空间在另一个命名空间中(B在a中)。通常当您使用"using 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();
        }
    }
}

堆叠命名空间可以';不能像任何其他元素一样被引用

通常当您使用"using SpaceA;"无需键入SpaceA即可访问所有图元。

只有属于SpaceA成员的直接类型。namespace-or-type-name永远不会使用普通using指令中的命名空间,然后使用名称中的另一个"亚命名空间"来解析。请注意,这与类型的声明方式无关(根据嵌套的命名空间声明或仅namespace SpaceA.SpaceB)-另一个示例是:

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

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

与此稍有不同的是,如果您有一个命名空间的using alias指令,则可以用于查找其他命名空间

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