讓我對.NET感到惱火的事情之一是,名稱空間應該是Pascal,這可能會導致名稱空間/類名衝突。什麼是名稱空間vs classname衝突問題的優雅解決方案?
考慮以下幾點:
namespace MyCompany.MyProduct.SalesOrder {
public class SalesOrder {
}
}
這是完全合法的代碼,但是消費者SalesOrder
爲一類現在必須使用的MyCompany.MyProduct.SalesOrder.SalesOrder
否則編譯原因惱人'MyCompany.MyProduct.SalesOrder' is a 'namespace' but is used like a 'type'
錯誤完全合格的名稱。
別人在做什麼來解決這個問題?有些地方我看到其他人違反規則並使用小包裝,這確實吸引了我,但我確實喜歡遵守標準並使用適當的外殼。在我迄今爲止的使用中,我已儘可能地訂閱了基於複數的名稱空間名稱的概念,但這有時看起來很難看。
我個人認爲.NET錯了,應該像使用Java的包一樣使用底層的名稱空間。
不要將您的類命名爲您的名稱空間。這很少是必要的。 – Talljoe 2011-04-04 09:15:17
Talljoe,我不爭論我的班級名稱與名稱空間名稱相同,問題是有時發生衝突。例如,如果我有一個具有名稱空間「MyProduct.Drawing」的繪圖產品,因爲我希望它對'System.Drawing'命名空間建模,但是後來我想在MyProduct.Drawing內部創建一個名爲Drawing的類。另一個問題是,我有一個使用'System.Drawing'的產品,我有一個名爲'Design'的類,它與'System.Drawing.Design'命名空間衝突。再次強調,我認爲命名空間應該全部小寫。 – 2011-04-04 09:26:55
您可以使用命名空間別名[http://msdn.microsoft.com/en-us/library/sf0df423.aspx]通過使其明確表達您想要的內容來解決此問題: using Design = MyProduct.Drawing.Design; – Talljoe 2011-04-04 09:33:19