当我想引用一个其类名恰好与当前类的命名空间的一部分相同的类时,我对 C# 处理命名空间的方式感到有些沮丧。这将产生一个编译器错误,“'Class' 是一个命名空间,但像类型一样使用”。
考虑以下代码示例,它演示了问题:
namespace A.B.C
{
public class Y
{
}
}
namespace X.Y.Z
{
public class Class1
{
public Y MyProp;
}
}
在这种情况下,我想使用命名空间“A.B.C”中的类“Y”。但是因为“Y”也是命名空间的一部分,所以 C# 将“Y”视为命名空间,而不是类型。
我可以通过完全限定类名“A.B.C.Y”或使用别名来解决这个问题,但我的一般偏好是 C# 在这种情况下不要将“Y”视为命名空间。通常我的代码(例如测试代码)包含与其测试的类相似的命名空间,而这种类/命名空间冲突意味着在设置时必须更加冗长。
我不确定这个过程叫什么,但似乎在解析类和命名空间时,C# 会沿着命名空间向上走,直到它找到匹配的命名空间的一部分。在这种情况下,它向上走并找到 Y。有没有办法告诉 C# 不要向上走,不允许这个部分命名空间匹配?
最佳答案
如果您在 namespace X.Y.Z
中编写 using A.B.C;
(Y
所在的命名空间),错误就会消失:
namespace X.Y.Z
{
using A.B.C;
public class Class1
{
public Y MyProp;
}
}
关于C#命名空间问题: Must avoid namespace containing any class name overlap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58327508/