我记得几周前我重新编写代码并在项目中创建了一些命名空间时出现错误,系统不允许我创建companyName.projectName.System
命名空间,我不得不将其更改为{{1} }。我不知道为什么。我知道有一个companyName.projectName.Systeminfo
命名空间,但它不是System
。我认为companyName.projectName.System
命名空间应该与A.B.C
命名空间不同。正确?
修改
我得到的错误就像这样:
A.A.C
答案 0 :(得分:5)
下面的代码编译并运行,所以我认为你需要给我们更多细节,因为就我所知,你没有理由不能创建companyName.projectName.System
这样的命名空间。
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var x = new ConsoleApplication1.Project.System.Something();
}
}
}
namespace ConsoleApplication1.Project.System
{
public class Something
{
}
}
答案 1 :(得分:5)
您遇到了命名空间冲突。
如果您命名命名空间System的最后一部分,那么编译器将很难确定您是在引用当前级别的(Microsoft)System命名空间还是内部System命名空间(甚至是System类)或财产或......)。
您将遇到类名和命名空间部分的相同问题。出于同样的原因,您无法创建名为System的类。
除非您想为所有实例指定完整的命名空间。
答案 2 :(得分:1)
这可能是因为您可以在.NET中使用相对名称空间。
如果您在命名空间A.B.C中有一个对象,那么当您在命名空间A.B中编码时,您可以将该对象称为C.ObjectName,而不是A.B.C.ObjectName。因此,如果您处于companyName.projectName级别,System将是不明确的,unelss您将开始使用命名空间别名。
但是,我发现最好的方法是首先避免引起混淆的事情,并将系统命名空间更改为其他内容,这一切都不再是一个持续存在的问题。
答案 3 :(得分:0)
答案 4 :(得分:0)
Eric Lippert刚刚发布了一个密切相关的问题。 http://blogs.msdn.com/ericlippert/archive/2010/03/09/do-not-name-a-class-the-same-as-its-namespace-part-one.aspx
通过在x.y名称空间中为代码创建x.y.System,很难确定您是否引用了x.y.System.Foo或System.Foo。
为了清楚起见,我想出一个不同的名字。