我正在玩名称空间并遇到一个我无法理解的问题。
给定类库中的命名空间结构如下:
Namespace History
Namespace History.Antiquity
Namespace History.Antiquity.East
Namespace History.Antiquity.West
当在声明命名空间历史记录的源文件中时,我不能使用History.Antiquity.East
或History.Antiquity.West
下定义的任何类型而没有完全限定它们,或者没有从“古代”开始限定它们
示例代码:
例如,下面给出了一个编译时错误(假设在History.Antiquity.East中定义了“Persia”类型):
using History.Antiquity;
namespace History
{
public class foo
{
public foo()
{
East.Persia.Conquer(); // error!
}
}
}
我需要完全符合波斯的资格,或者从古代开始获得资格。或者,我可以引入一个别名:
using East = History.Antiquity.East;
实际问题:
我似乎无法理解为什么这个命名空间结构存在问题。怎么可能.Net发现它有冲突?
答案 0 :(得分:3)
您必须打开命名空间才能在C#中查看它的类型。子名称中的类型不会自动显示。因此,将以下内容放在代码文件的顶部:
using History.Antiquity.East;
然后您可以按如下方式直接访问您的类型:
Persia.Conquer();
顺便说一句,您的代码示例看起来像是VB,C#和C ++ / CLI的混合......您实际使用的是哪种语言?
答案 1 :(得分:1)
虽然在VB中使用这样的部分命名空间是完全可以接受的,但是C#并不是设计用于那种方式。
答案 2 :(得分:1)
代码会给你一个错误,因为它应该只是
using History.Antiquity;
但在代码中添加此内容意味着您只能通过History.Antiquity.East
引用East
命名空间。
您可以做的是,如果您在History
命名空间中,则可以使用Antiquity.East
,但using
不会对此产生影响。
答案 3 :(得分:0)
namespace History
{
using Antiquity;
public class foo {
public foo() {
East.Persia.Conquer(); // error!
}
}
}
你可以这样做。