2008-09-19 138 views

回答

2

的好處是,你不需要添加導入您所使用的一切,尤其是如果它是你從一個特定的命名空間中的唯一的事情,還可以防止碰撞。

的缺點,當然,是代碼氣球出大小和變得更難讀你使用特定的預選賽了。

我個人傾向於使用進口的大多數事情,除非我知道肯定我將只使用一個特定命名空間一次或兩次的東西,所以它不會影響我的代碼的可讀性。

+0

您真的認爲添加1個使用語句與輸入完全限定名稱相比是一個缺點嗎? – Statement 2008-09-19 03:44:51

2

您對所引用的類型非常明確,這是一個好處。儘管在完全相同的過程中,您放棄了代碼清晰度,這在我的情況下顯然是一個缺點,因爲我希望代碼可讀性和可理解性。我去的短版,除非我有隻能用明確的引用的類..來解決不同的命名空間衝突,除非我做一個別名使用關鍵字使用:

using Datagrid = System.Data.Datagrid; 
+0

是的,我想我並不需要顯式聲明的時候我可以將鼠標懸停在該項目,看到完全限定的名字,這要歸功於VS方便的工具提示(以及Eclipse等)。 – MrBoJangles 2008-09-19 03:41:44

1

我不認爲確實存在一個缺點,就是可讀性與編碼的實際時間。一般來說,如果你沒有含糊不清的對象的命名空間,我不認爲它是真的需要。另一件要考慮的是使用水平。如果你有一個使用反射的方法,並且你可以正確輸入10次System.Reflection,那麼這不是什麼大問題,但是如果你計劃使用命名空間,那麼我會推薦一個include。

+1

那,我做任何ReSharper告訴我要做的事情。我只是半開玩笑。 – MrBoJangles 2008-09-19 03:43:14

+0

LOL = P ReSharper是一個非常漂亮的插件和很多人喜歡它,所以我不會打折它的建議。 – 2008-09-19 03:49:04

2

實際上的完整路徑是global::System.Data.DataGrid。使用更合適的路徑的目的是避免使用額外的使用語句,特別是如果引入另一個使用語句會導致類型解析問題。存在更完全限定的標識符,以便在需要明確時可以明確,但如果類的名稱空間已清除,則DataGrid版本對許多標識符更爲清楚。

1

根據您的情況,額外的限定符會產生一個警告(如果這是您的意思是多餘的)。如果您將警告視爲錯誤,那是一個非常嚴重的缺點。

我遇到了這個與GCC爲例。

struct A { 
    int A::b; // warning! 
} 
+0

哦,不錯的場景。我不認爲我遇到過這種情況。 – MrBoJangles 2008-09-19 03:44:21

2

我通常使用可用的最短表格來保持代碼儘可能乾淨和可讀。畢竟,VS編輯器中的使用指令就是這樣的,並且工具提示可以即時詳細說明類型的出處。

我也傾向於使用的RCW命名空間標籤在COM互操作層,在代碼中顯式調用了這些變量(他們可能需要在生命週期和收集特別注意),如

using _Interop = Some.Interop.Namespace; 
2

在表現方面沒有上行/下行空間。在編譯時解決所有問題,無論您是否使用完全限定名稱,生成的MSIL都是相同的。

之所以它的使用是在.NET世界流行是因爲自動生成的代碼,如設計師標記。在這種情況下,最好是完全限定名稱,比如類名,因爲可能與代碼中可能存在的其他類發生衝突。

如果有像ReSharper的一個工具,它實際上告訴你,你有什麼完全合格的引用是不必要的(例如,以灰色出來),所以你可以垂耳他們。如果您經常在不同的代碼庫中粘貼代碼,那麼完全限定它們是必須的。 (話又說回來,爲什麼你會想要做的複製粘貼所有的時間,它的代碼重用的一個不好的形式!)