繁体   English   中英

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

[英]Stacking namespaces can't be referenced just like any other element?

所以这是我制作的一个片段,其中一个命名空间位于另一个内部(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();
        }
    }
}

通常当您使用“使用SpaceA;”时 您无需输入SpaceA就可以访问所有元素。

仅属于SpaceA成员的直接类型。 namespace-or-type-name永远不会在常规using指令中使用名称空间,然后在名称中using另一个“子名称空间”进行解析。 请注意,这与类型的声明方式无关(就具有嵌套的名称空间声明还是仅具有名称namespace SpaceA.SpaceB )-另一个示例将是:

using System;

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

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

与此稍有不同的是,如果您对某个名称空间使用了using别名指令, 可以在该位置使用它来查找其他名称空间

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM