簡體   English   中英

名稱空間與類名同名

[英]Namespace with same name as a class name

我認為以下內容是有意義的,但它不可能並且會拋出錯誤: The namespace 'foo' already contains a definition for 'bar'

namespace foo
{
    public class bar { ... }
}

namespace foo.bar
{
    public class baz : EventArgs { ... }
}

對於這樣的案例,命名空間命名的適當方法是什么?

您必須了解在CLR的上下文中,沒有命名空間這樣的東西。 命名空間純粹是一種語言特性,僅用於簡化代碼,因此我們不必總是始終讀取完全限定的類名。

在你的例子中,

namespace foo
{
    public class bar { ... }
}



namespace foo.bar
{
    public class baz : EventArgs { ... }
}

當編譯這個源代碼時,IL甚至不知道有兩個名稱空間--foo和foo.bar。 相反,它只知道類定義。 在這種情況下,當遇到類欄時,它知道你有一個名為foo.bar的類

當遇到類baz時,它會將類的全名解析為foo.bar.baz

但是如果是這種情況,那么baz應該在bar的類定義中正確聲明,而不是像你在這里所做的那樣在單獨的命名空間中聲明。

您必須為命名空間或類名找到另一個名稱。 沒有辦法繞過它。

找到合適的命名很困難,但可以完成。

這實際上取決於你想要達到的目標。 如果你真的希望baz位於foo.bar名稱空間下,因為它依賴/緊密鏈接到bar,可以使它成為bar的子類:

namespace foo
{
    public class bar 
    {
        public class baz : EventArgs { ... }
    }
}

您現在可以創建一個新實例:

var test = new foo.bar.baz();

在同一名稱空間內,不可能具有相同的類名。 如果您的命名空間看起來非常相似,那么您可能希望它們位於相同的命名空間中。 如果不是這種情況,您可能需要重新考慮名稱空間中類的邏輯分類。

也許

namespace foo_bar
{
    public class baz : EventArgs { ... }
}

否則根本不可能

暫無
暫無

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

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