2010-10-30 55 views
1

我認爲在C#中強制名稱空間之間的類型可見性而不是程序集(內部)可能有用。在C#中的名稱空間之間強制實現類型可見性

似乎這樣的概念可以幫助開發人員使用代碼庫,確保在提供類似功能的另一種內部類型可用的地方使用正確的類型,但會導致「架構」缺點(不需要的依賴關係等) 。

其他人是否認爲這會有用,目前有可能嗎?如果不是爲什麼不呢?

此外,preclusions的概念 - 指定名稱空間和/或程序集之間引用的負面約束的能力是C#有用的補充嗎?

回答

2

您可以讓它們公開,使用自定義屬性標記它們,然後添加FxCop規則以檢查命名空間外部的訪問。

這不會安全地強制執行限制,並且在使用反射訪問成員時會失敗,但如果只是關於策略/編碼風格,則應該足夠了。

我認爲還有一個現有屬性可以隱藏Intellisense的成員,您可以將其與自定義屬性結合使用。

3

一個類型強烈地綁定到它定義的程序集。名稱空間不是,它可以出現在多個程序集中。例如System.Configuration。

讓我們暫時假定程序集的元數據格式將被改變(-10億分)以存儲名稱空間的屬性。這些屬性仍然需要存儲在程序集中,因爲這是元數據的存儲單元。現在您必須處理CLR加載另一個程序集並找到相同名稱空間但具有衝突屬性的可能性。它怎麼可能解決這個問題?

更嚴重的是,如何防止外部代碼使用相同的名稱空間和屬性突然訪問實現細節,這些細節本來就是私有的。這完全破壞了擁有內部關鍵字的價值。

+0

關於跨越程序集的命名空間的強項。我想知道另一種類型的代碼分組是否有用。我認爲在C#中使用更細粒度的詞彙來定義基於客戶類型的類型可見性(例如,功能的消費者或合作生產者)是有用的。只是大聲思考。 – Ben 2010-10-30 13:20:21

相關問題