繁体   English   中英

当类和命名空间同名时区分类和命名空间

[英]Differentiating class and namespace when class and namespace have the same name

namespace A
{
    class B
    {

    }

    class A
    {
        public void f()
        {
            A.B var = new A.B();
        }
    }
}

使用 msvc 2019 和 .net core 3.1 编译,此代码示例给出以下错误:

Error   CS0426  The type name 'B' does not exist in the type 'A'

我知道最好不要为类和命名空间提供相同的名称。 但是有没有办法解决这种碰撞?

不需要声明命名空间,因为类B已经用与类A相同的命名空间声明了。 因此,只需删除A ,Visual Studio 就会弄清楚它是可取的:

namespace A
{
    class B
    {

    }

    class A
    {
        public void f()
        {
            B var = new B();
        }
    }
}

更新:

另一种解决方案是:

using _a = A;

namespace A
{
    class B
    {

    }

    class A
    {
        public void f()
        {
            _a.B var = new _a.B();
        }
    }
}

您应该避免将类和命名空间命名为相同的情况。 如果您不能或使用第三方代码,您始终可以使用global::关键字引用命名空间:

namespace A
{
    class B
    {

    }

    class A
    {
        public void f()
        {
            global::A.B var = new global::A.B();
        }
    }
}

我认为您误解了名称空间的工作原理。 您不需要在类 A 中完全限定 B。您可以简单地引用类 B,因为两个类都在同一个命名空间中。 像这样:

namespace A
{
    class B
    {

    }

    class A
    {
        public void f()
        {
            B var = new B();
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM