命名空间和类具有相同的名称

本文关键字:命名空间 | 更新日期: 2023-09-27 18:16:27

我有以下类

namespace COM.XX.ZZ{
 class XX{
 }
}

当我试图在另一个类

中使用它时
using COM.XX.ZZ;
class someClass{
 static void main(String args[]){
       XX.someMethod();
 }
}
Visual studio混淆了类和包,因为它们有相同的名称。名称空间和类应该总是不同,这是visual studio的已知限制吗?

命名空间和类具有相同的名称

没有必要使用单独的类名和名称空间名,但确实,编译器有时会感到困惑。对于各方来说,最好保持名称空间名和类名分开。

如果您确实想使用相同的名称,可以帮助编译器避免混淆。为您的类使用using:

using XXClass = COM.XX.ZZ.XX;

那么你可以这样使用:

XXClass.someMethod();

这是不推荐的,所以我建议重命名它们中的任何一个。


另一个可能失败的原因是someMethod不是静态的。在这种情况下,编译器认为你是指XX -命名空间。尝试先实例化XX:

XX xx = new XX();
xx.someMethod();

如果您的类具有静态方法,称为someemethod(),该方法是可访问的,例如:

namespace COM.XX.ZZ
{
    class XX
    {
        public static void SomeMethod()
        {
        }
    }
} 

你可以使用它:

using COM.XX.ZZ;
class someClass
{
    static void main(String args[])
    {
       COM.XX.ZZ.XX.SomeMethod();
    }
}

注意,我在调用静态方法之前添加了完整的名称空间前缀。

编辑:对于命名空间和类使用相同的名称真的不是一个好主意。