2013-10-30 57 views
3

理論問題:是做這個有什麼區別:命名空間訪問器比。 「使用」 訪問器

using System; 
... 
var foo = new String("foo"); 

這:

var foo = new System.String("foo"); 

加載DLL?性能差異?

主要是,我的疑問是這種情況下最好的代碼實踐是什麼?

+0

如果您不使用「使用」,您必須始終使用完整的限定名稱,包括console.write ... – Doro

+0

使用是很好的代碼練習。所以你不必一直使用全名。我不認爲這裏有任何性能差異,這只是很好的代碼練習。 – Dips

回答

3

它對性能或加載沒有影響。

但它可能會影響IDE性能 - 例如,如果您使用using指令,它將添加IDE必須查找以解決Intellisense的位置。這不是不使用它們的原因,但可能是將它們保持在最低限度的原因,並避免不使用的指令。

作爲一種編碼習慣,如果您在不同名稱空間中具有類似命名的類,則using指令可能會導致混淆。例如,假設你正在創建一個具有稱爲Tasks的關鍵對象的待辦應用程序,但是你也使用Threading.Tasks來做一些線程化的東西。你不想在那裏使用using指令。

+0

謝謝!那是我正在尋找的答案 –

9

不,他們會被編譯成完全相同的IL。

using directive(有沒有這樣的術語「命名空間訪問」)是只是告訴C#編譯器試圖解決簡單的名稱完全合格的人時,它應該在該命名空間的一種方式。

(當然兩者實際上將無法編譯,因爲沒有String(String)構造函數在.NET中,但是這是一個不同的問題。)

注意,使用內置的別名string等同於使用System.String型太 - 它真的只是一個別名。例如:

// Just one type! 
string x = new String(new char[10]); 
5

同樣的事情。使用任何你喜歡的更多。我使用using,並在發生名稱衝突時回退到全名。

1

正如其他人所說,沒有性能優勢。不使用using的一個好處是避免名稱空間模糊。假設您有兩種不同類型的頁面,一種是指您網站上的頁面,另一種是指書中的頁面。它們是具有不同屬性的兩個離散對象。在這種情況下,您必須寫出整個名稱空間,以便能夠區分您所指的是哪種類型的頁面。