子命名空间的命名空间访问问题

时间:2013-11-15 03:57:35

标签: c# namespaces

我在不同的子命名空间中有两个类:

namespace Acme.ByteTools
{
        class ByteTools
        {
        ...
        }
}

namespace Acme.IO
{
        class Reader
        {
        ...
        }
}

当我尝试从任何第三个命名空间访问Acme.ByteTools时,我使用:

using Acme.ByteTools;
...
ByteTools.BytesToUint(...);

但是当我尝试从Acme.IO访问Acme.ByteTools时,编译器需要不同的表示法:

using Acme.ByteTools;
...
ByteTools.ByteTools.BytesToUint(...);

为什么?

1 个答案:

答案 0 :(得分:2)

包括传奇人物Eric Lippert在内的其他人表示......请不要制造碰撞。我看到由于冲突而使用别名指令的代码很多,我根本无法表达看到命名空间从一个类更改为类的名称是多么令人沮丧。

混乱不言自明。看看这样的事情:

namespace ConsoleApplication1
{    
    class Program
    {
        static void Main(string[] args)
        {
            A a = new A();//A's a namespace
            A.A b = new A.A();//A is a namespace this works!
            global::A.A nuts = new A();//This fails...ugh
            Console.ReadLine();
        }
    }
}

namespace A
{    
    class A
    {
        public void DoWork()
        {
            A a = new A();//A's a class
            A.A b = new A.A();//A is a type (class) A.A makes no sense to the compiler
            global::A.A nuts = new A();//Oh but this works fine
        }

    }
}

所以修复是确保名称空间和类不同。使用别名指令using B = A;可能会减轻痛苦,但是该指令可以在不同文件之间进行更改,而其右侧的任何内容都必须完全合格。