C#命名空间结构强制我使用别名

时间:2011-07-01 20:48:57

标签: c# namespaces

我正在玩名称空间并遇到一个我无法理解的问题。

给定类库中的命名空间结构如下:

Namespace History
Namespace History.Antiquity
Namespace History.Antiquity.East
Namespace History.Antiquity.West

当在声明命名空间历史记录的源文件中时,我不能使用History.Antiquity.EastHistory.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发现它有冲突?

4 个答案:

答案 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!
        }
    }
}

你可以这样做。