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

本文关键字:别名 空间结构 | 更新日期: 2023-09-27 18:01:10

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

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

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

在声明名称空间History的源文件中,如果没有完全限定它们,或者没有以"Antiquity"开头的限定它们,我就不能使用在History.Antiquity.EastHistory.Antiquity.West下定义的任何类型。

示例代码:

例如,下面给了我一个编译时错误(假设"波斯"类型在History.Antificy.East中定义(:

using History.Antiquity;
namespace History
{
    public class foo
    {
        public foo()
        {
            East.Persia.Conquer(); // error!
        }
    }
} 

我需要要么完全符合波斯的资格,要么从古代开始符合它的资格。或者,我可以介绍一个别名:

using East = History.Antiquity.East;

实际问题:

我似乎不明白为什么这个名称空间结构有问题。.Net怎么会觉得有冲突呢?

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

您必须打开一个命名空间才能在C#中查看它的类型。子命名空间中的类型不会自动可见。因此,将以下内容放在代码文件的顶部:

using History.Antiquity.East;

然后你可以直接访问你的类型如下:

Persia.Conquer();

顺便说一下,您的代码示例看起来像是VB、C#和C++/CLI的混合体。。。你实际使用的是什么语言?

虽然在VB中使用这样的部分名称空间是完全可以接受的,但C#并不是这样设计的。

代码会给您一个错误,因为它应该只是

using History.Antiquity;

但是在代码中添加这个并不意味着您可以仅通过East来引用History.Antiquity.East命名空间。

如果您在History命名空间中,您可以使用Antiquity.East,但using不会影响这一点。

namespace History
{
    using Antiquity;
    public class foo {
        public foo() {
            East.Persia.Conquer(); // error!
        }
    }
}

你可以做这样的事。