使用嵌套命名空间时如何使用using关键字

4

有没有什么原因,为什么

new N1.N2.N3.C();

代码可以编译,但是

using N1.N2;
...
new N3.C();

你不会吧?

编辑

类C是在另一个已引用的程序集中这样定义的:

namespace N1.N2.N3
{
   class C
   {
   }
}
2个回答

2

由于命名空间需要在使用时进行完全限定或通过using导入。对象的定义可以是完全限定的命名空间、别名或者没有任何命名空间,此时必须使用using导入完整的命名空间。

N3并不是完整的命名空间,只是其中的一部分。


1
好的,谢谢!我有点困惑,因为在N1.N2.SomeOtherNamespace中使用N3.C是可以正常工作的。所以这个说法并不完全正确,在某些情况下,你也可以只使用部分命名空间名称。 - Bohdan
规则是您可以在N1.N2命名空间内使用N3.C(例如N1.N2.SomeOtherNameSpace的情况),但不能从另一个命名空间中使用。有关更多详细信息,请参见此问题 - ThunderGr

0

因为您没有包含N3命名空间,所以找不到C。


1
这是一个全新的命名空间,您只需要包含其中的N2,而不是每个命名空间。如果不是这样的话,您只需添加using System就可以包含整个 .net 框架! - TJHeuvel
2
你的评论与_TJHeuvel_无关。Bohdan 并没有问为什么只指定 using N1N3.C() 无法编译,但是当指定 using N1.N2 时可以编译。这只是一个一级引用。你不能像你所说的那样将其与 "using System 包含整个 .net 框架" 进行比较。 - Otiel
但是在N2中,您可以使用C类拥有N2a和N2b。因此,仅有一个级别的引用也没有意义。 - apocalypse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接