[英]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.