C#命名空间结构迫使我使用别名
本文关键字:别名 空间结构 | 更新日期: 2023-09-27 18:01:10
我在玩名称空间,遇到了一个我无法真正理解的问题。
给定类库中的名称空间结构如下:
Namespace History
Namespace History.Antiquity
Namespace History.Antiquity.East
Namespace History.Antiquity.West
在声明名称空间History的源文件中,如果没有完全限定它们,或者没有以"Antiquity"开头的限定它们,我就不能使用在History.Antiquity.East
或History.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#中查看它的类型。子命名空间中的类型不会自动可见。因此,将以下内容放在代码文件的顶部:
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!
}
}
}
你可以做这样的事。