C#命名空间问题:必须避免包含任何类名重叠的命名空间?

Dan*_*Dan 2 c# namespaces

当我想引用其类名称恰好与当前类的名称空间的一部分相同的类时,我发现C#处理名称空间的方式有些沮丧。这将产生一个编译器错误,“'Class'是一个命名空间,但像类型一样使用”。

请考虑以下代码示例,该示例演示了该问题:

namespace A.B.C
{
    public class Y
    {      
    }
}

namespace X.Y.Z
{
    public class Class1
    {
        public Y MyProp;
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我想使用名称空间“ ABC”中的类“ Y”。但是因为“ Y”也是名称空间的一部分,所以C#将“ Y”视为名称空间,而不是类型。

我可以通过完全限定类名“ ABCY”或使用别名来解决此问题,但我的一般偏好是C#在这种情况下不将“ Y”视为命名空间。我经常有一些代码,例如测试代码,其中包含与测试的类相似的名称空间,而这种类/命名空间的冲突意味着在设置时必须更加冗长。

我不确定该过程称为什么,但是似乎在解析类和名称空间时,C#将遍历名称空间,直到找到匹配的名称空间的一部分。在这种情况下,它向上走并找到Y。是否有一种方法告诉C#不要向上走,不允许这种部分名称空间匹配?

Swe*_*per 6

如果您在其中写入using A.B.C;(其中的名称空间Ynamespace X.Y.Z,错误将消失:

namespace X.Y.Z
{
    using A.B.C;
    public class Class1
    {
        public Y MyProp;
    }
}
Run Code Online (Sandbox Code Playgroud)