我認爲以下幾點是有意義的,但這不可能,並且會拋出一個錯誤:The namespace 'foo' already contains a definition for 'bar'
。命名空間與類名同名
namespace foo
{
public class bar { ... }
}
namespace foo.bar
{
public class baz : EventArgs { ... }
}
這樣的情況命名空間命名的適當方式是什麼?
我認爲以下幾點是有意義的,但這不可能,並且會拋出一個錯誤:The namespace 'foo' already contains a definition for 'bar'
。命名空間與類名同名
namespace foo
{
public class bar { ... }
}
namespace foo.bar
{
public class baz : EventArgs { ... }
}
這樣的情況命名空間命名的適當方式是什麼?
這真的取決於你想要達到的目的。如果你真的想巴茲的foo.bar命名空間下坐,因爲它取決於/緊密聯繫你吧可以使一個子類吧:
namespace foo
{
public class bar
{
public class baz : EventArgs { ... }
}
}
現在,您可以創建一個新的實例爲:
var test = new foo.bar.baz();
這看起來像我想要實現的。一旦我被允許,我會接受。 – Stijn 2011-10-17 12:58:38
您必須爲名稱空間或類名找到其他名稱。沒有辦法繞過它。
找到合適的命名很困難,但可以完成。
在相同的命名空間中,不可能具有相同的類名。如果你的命名空間看起來很相似,你可能希望它們在同一個命名空間中。如果情況並非如此,則可能需要在命名空間內重新考慮類的邏輯分類。
同意''。在命名空間中必然會導致更進一步的混亂。 – christofr 2011-10-17 12:54:27
可能
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的類定義中正確地聲明,而不是像在這裏所做的那樣在單獨的名稱空間中聲明。
沒有一個實際的例子,建議將不得不做出有根據的猜測,涵蓋所有可能的基礎,或者沒有成爲一個好的答案;按照經驗法則,名稱空間是一個類別,或泛化,而類是特定的實用程序 - 命名應該反映這一點。例如`System.Collections`命名空間和類,比如`System.Collections.CollectionBase`。如果在這個命名空間中需要一個名爲`Collections`的類,那麼其他的東西是錯誤的。 – 2011-10-17 12:54:02
這或多或少是一個實際的例子。我想在`bar`類中使用基於`EventArgs`的自定義類型。我應該將自定義類型放在與「bar」相同的名稱空間中嗎? – Stijn 2011-10-17 12:56:09