簡體   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