gpt4 book ai didi

c# - 子命名空间的命名空间访问问题

转载 作者:行者123 更新时间:2023-12-04 17:00:32 25 4
gpt4 key购买 nike

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

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

为什么?

最佳答案

正如包括传奇人物 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;可能会减轻痛苦,但是该指令可以从文件更改为文件,并且其右侧的任何内容都必须完全限定。

关于c# - 子命名空间的命名空间访问问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19993266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com