簡體   English   中英

名稱空間和類之間的名稱沖突

[英]Name conflict between namespace and class

我有一個帶有多個名稱空間的結構,並且在每個名稱空間中都有一個靜態類,該類在該名稱空間的網絡中有點小。 就像系主任一樣

讓我們以兩個命名空間為例, Foo.Bar.BazFoo.Bar.Quux

我有一個看起來像這樣的文件:

namespace Foo.Bar.Baz
{
  static class Baz
  {
    public static void DoSomething()
    {
      Console.Writeline("Doing something...");
    }
  }
}

然后第二個文件:

using Foo.Bar.Baz
namespace Foo.Bar.Quux
{
  static class Quux
  {
    public static void GetToWork()
    {
      Baz.DoSomething();
    }
  }
}

現在,當我嘗試編譯時,在第二個文件中出現錯誤,因為它認為Baz是名稱空間而不是類。 但是由於我using Foo.Bar.Baz行,因此可以在該名稱空間中使用任何類而無需在名稱空間名稱前添加前綴,對嗎? 我可以正確使用該名稱空間中的其他內容,但不能使用具有相同名稱的類。

有點像編譯器在秘密地將此行添加到每個文件: using Foo.Bar

另外,我不能僅將靜態Baz類放在Foo.Bar命名空間內,因為那樣我會收到錯誤消息,說Foo.Bar.Baz不是命名空間(因為我在該命名空間中有其他東西,並且有使用該命名空間的文件) 。 然后,似乎編譯器看到了靜態類並確定Foo.Bar.Baz是靜態類而不是名稱空間。

當然,我可以將靜態類重命名為Manager之類的東西,但是我仍然必須在需要從兩個命名空間訪問內容的文件中拼出完整的Baz.Manager.SomeMethodQuux.Manager.SomeMethod 這感覺很Baz.SomeMethod ,我寧願只是Baz.SomeMethodQuuz.SomeMethod

有任何想法嗎?

也許這可以幫助:

using Baz = Foo.Bar.Baz.Baz;

由於Baz是靜態類,因此它不能包含實例成員。 因此,必須將DoSomething()聲明為靜態方法。

擁有此功能后,您可以執行以下操作:

using Foo.Bar.Baz;

public void GetToWork()
{
    Baz.Baz.DoSomething();
}

或這個:

using baz = Foo.Bar.Baz.Baz;

public void GetToWork()
{
    baz.DoSomething();
}

但是,我確實同意您的問題中的評論,即對名稱空間(一組類的邏輯容器)及其包含的類(封裝數據和行為)使用相同的名稱可能會導致可讀性/可維護性問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM