0

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

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(...);

为什么?

4

1 回答 1

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;可能会减轻痛苦,但是该指令可以在文件之间更改,并且其右侧的任何内容都必须是完全限定的。

于 2013-11-15T04:20:17.940 回答