2012-02-07 178 views
4

在下面的例子中,哪一個最好用。正如你所看到的,我只使用列表集合,而沒有其他名字空間。是這樣的,當執行Example1時,名稱空間system.collections.generic下的所有類都被加載到內存中或什麼?兩個例子的行爲如何?c中的命名空間#

Example1: 

using System.Collections.Generic; 
public interface ICustomer 
{ 
    List<Customer> GetAll(); 
} 


Example2: 

public interface ICustomer 
{ 
    System.Collections.Generic.List<Customer> GetAll(); 
} 

回答

0

這兩個示例的行爲完全相同(請記住它們都編譯爲中間代碼)。我更喜歡1,但這是爲了清晰,而不是如何表現。

1

它們是相同的;你不應該擔心using語句,因爲它主要影響智能感知性能

而且在名稱衝突的情況下,你可以這樣做:

using Generic = System.Collections.Generic; 
public interface ICustomer 
{ 
    Generic.List<Customer> GetAll(); 
} 
+1

在我看來,唯一的用途是當你有名稱衝突,不想寫出其中一個命名空間的整個名稱空間。除此之外,它混淆了代碼並使其更難閱讀。 – 2012-02-07 08:11:30

+0

事實上,現在您必須知道System.Collections.Generic的泛型。如果我看到這一點,我認爲Generic.List代表的是比.net庫定製的東西。 – RvdK 2012-02-07 08:32:35

+0

只是好奇,爲什麼答案得到了downvote!如果有問題,請告訴我,我會刪除答案! – fardjad 2012-02-07 08:37:11

0

它將使唯一的區別是智能感知。在文件中添加更多using語句會增加Intellisense必須進行索引和顯示的內容。我發現示例2的可讀性的好處值得Intellisense所做的額外工作。

除此之外,這兩個示例都以相同的方式編譯爲CIL,並且對性能完全沒有影響。

+0

而且增加的工作並不多。即使我的上網本與Intellisense沒有問題。 – 2012-02-07 08:09:06

0

AFAIK使用兩者都沒有真正的好處。第二個更加冗長,可能會讓代碼閱讀變得更加困難。如果你必須在你的接口/類中多次引用List類型,我建議包括相關的命名空間,以減少冗長。

儘管如此,這已經在SO上討論了幾次:例如,herehere

0

取決於使用情況。如果你有很多同名的班級,例如有另一類也叫List,第二種方法比較好(更清晰)。

否則,我更喜歡使用方法1來使用更清晰的&格式化代碼。

0

如果你認爲你將需要另一個函數來創建一個更加列表 - 你用前人的精力例1,

,但如果這是這個名單的唯一實例 - 這並不重要,如果它是練習1或EX2。

(只爲序 - 我會爲您提供在EX1至使用)

而且 - 不,當你使用Using - 不是所有的庫加載...什麼是加載 - 只是,對於例如,您撥打的List

好 - 好運!

1

只有編譯器需要using語句來導入名稱空間。它是一個捷徑,所以你不需要完全限定你正在使用的類型。

我喜歡導入所有名稱空間,如果我只在該名稱空間中使用一種類型。要刪除不需要的名稱空間,可以使用Visual Studio的函數來組織名稱空間。

5

第一種情況讓你在你的班級開始時聲明你打算在你的班級中使用什麼(你的聯結)。 聲明,以及其他用途,使用你的IDE和編譯器:

  • 啓用智能感知(自動完成)
  • 激活擴展方法(如LINQ的擴展方法)

所以沒有宣佈他們你會鬆動這個功能。 這種用法是可取的。它也提高了代碼的可讀性。 即使Visual Studio不強烈鼓勵您保持用例清潔(例如,在基於Java的環境中顯示警告等),但始終優先選擇從上下文菜單中執行「刪除未使用的導入」在你的課堂文件上。

第二種情況允許您使用通過完全限定名稱顯式引用它的類型。 這種情況下通常使用只有在名稱衝突的情況下。

最終,二進制編譯的代碼將是相同的,因爲編譯器會優化它,但如果使用第一種方法,編譯過程本身可能會更有效。

+0

+1用於記憶延伸方法 – 2012-02-07 08:12:55