2010-08-05 44 views
4

是否存在從不同名稱空間引用類型的一般規則。你一直使用:使用指令與完整路徑名稱

using System.Drawing; 

,而不是在需要的時候將其定義:

System.Drawing.Graphics gr; 

我傾向於當我只輸入完整的命名空間「呼叫」一次。有沒有關於這方面的最佳做法?

回答

9

我用什麼的,(我相信大多數開發人員使用),是總說

using System.Drawing; 

和儲備

System.Drawing.Graphics gr; 
只爲地方

那裏是有在兩個衝突Graphics在不同的命名空間中定義,即使如此,我仍然寧願使用using來區分它們:

using MyGraphics=My.Own.Conflicting.Named.Graphics; 
// : 
var myGraph = new MyGraphics(); 
2

調用一次可以變成更進一步的行,稱它爲10,20或n次。我的經驗法則是,C#設計團隊爲了某種原因將「使用」放入語言中,所以如果您原諒雙關語,請使用它。

例如如果我寫了下面的代碼:

private System.Drawing.Drawing2D.HatchBrush GetHatchBrush() 
{ 
    System.Drawing.Color c = System.Drawing.Color.Red; 
    System.Drawing.Drawing2D.HatchBrush h = new System.Drawing.Drawing2D.HatchBrush(System.Drawing.Drawing2D.HatchStyle.BackwardDiagonal, c); 

    return h; 
} 

只使用ColorHatchBrush一次,我當然更願意閱讀:

private HatchBrush GetHatchBrush() 
{ 
    Color c = Color.Red; 
    HatchBrush h = new HatchBrush(HatchStyle.BackwardDiagonal, c); 

    return h; 
} 

更妙的是,個人,將是:

private System.Drawing.Drawing2D.HatchBrush GetHatchBrush() 
{ 
    var c = Color.Red; 
    var h = new HatchBrush(HatchStyle.BackwardDiagonal, c); 

    return h; 
} 

正如詹姆斯柯倫所說,唯一的t ime我完全有資格使用它的完整名稱空間,而不是使用using將類名稱帶入範圍時會引入歧義。

2

我只避免using聲明條件,使用兩個不同的名稱空間會引入命名衝突。

+0

即使這樣我就在其中一個名稱空間上使用別名。 – 2010-08-05 14:12:42

1

這裏沒有公認的最佳實踐。
只是使用常識。這裏唯一的目標是可讀性。

當您的代碼中只使用了一次或兩次相對較少的類時,請使用全名。

對於大多數命名空間,尤其是經常使用的命名空間,將它們放在頂部的using指令中。

還有一些非常罕見的情況,您需要使用它來創建別名,但這個問題並沒有真正的影響。

1

我傾向於鍵入完整的命名空間時 我只「調用」它一次。有沒有 關於這方面的最佳做法?

一般來說,我請參閱「使用」而即使使用時只調用的東西一次,這似乎是標準的(並且也是什麼ReSharper的將推動你走向,很多人往往喜歡它們的默認約定)

3

代碼中的完全限定名稱令人分心並且很吵鬧。我寧願永遠不要擁有它們。如果存在名稱空間衝突,則使用別名可以解決該問題。我們面對它,99.99%的C#開發人員正在使用Visual Studio,因此知道類型的名稱空間和/或程序集來自F12,或者只是將鼠標懸停一秒鐘。

我唯一喜歡代碼中完全限定名的代碼是在代碼示例中,就像Stack Overflow中的代碼示例一樣,以清楚地說明正在使用的類型。

0

如果你認爲模塊應該爲你回答這個問題好一點。

如果您濫用名稱空間使用或不使用名稱空間,您的問題將會發生名稱衝突。

如果你有一個專用於圖形表達的模塊,並且該模塊只能通過它的接口使用,那麼你甚至不會在該模塊之外訪問它。在這種情況下,你將在模塊內部使用Using(這麼說!),所以這對理解來說是一件好事,讓我們說出來,你的手指也是!