2011-04-02 56 views
3

即時通訊編程的初學者,老實說,我學習的一切我想確保我做的正確。 我的問題是,在MSDN網站,它說明了處理異常時,我必須使用「System.foo」,例如:System.Exception或只是異常

catch (System.DllNotFoundException ex) 

但是很多我,這往往會利用周圍的程序員無例外的標題,例如:

catch (DllNotFoundException ex) 

我知道這可能是微不足道的,也許是非常愚蠢的我的要求,但有沒有在這兩個實現任何真正的區別?比如哪一種更好?

我明白任何意見,

在此先感謝。

+2

其他答案都是正確的。我唯一需要補充的是,**最終都會編譯成*完全相同的東西**。生成的IL僅使用完全限定的類型名稱。這意味着兩者都不是更好的做法,儘管導入常用命名空間可以幫助保持您的代碼更短,更易於閱讀。 – 2011-04-02 14:37:00

+2

就「更好的練習」而言,大多數人傾向於使用using語句並從類中刪除名稱空間(例如「DllNotFoundException」)。它更容易閱讀,因此更可取。通常,只有在使用兩個名稱相同的類的兩個不同名稱空間時,纔會寫出帶名稱空間的完整類名。 – Misko 2011-04-02 14:38:16

+0

@ CodeMonkey1:我認爲,最佳做法是保持命名空間爲1或2次出現,並且如果更多地導入命名空間 – abatishchev 2011-04-02 19:20:04

回答

4
using System; 
using System.IO; 

... 
catch (DllNotFoundException) 
{ 
} 
catch (IOException) 
{ 
} 

// not using that namespaces 

... 
catch (System.DllNotFoundException) 
{ 
} 
catch (System.IO.IOException) 
{ 
} 

所以沒有區別。僅取決於您導入的命名空間。

+0

謝謝,我現在明白了很多,現在非常感謝你:) – CSharpningNoob 2011-04-02 14:21:33

+0

@CSharpningNoob:很高興幫助! :)不要忘記,你可以投票回答好,並接受最適合你的。 – abatishchev 2011-04-02 14:24:52

+0

+1爲「圖片」。 – khachik 2011-04-02 14:33:27

3

他們是表達完全相同的東西的不同方式。 DllNotFoundException是系統名稱空間的一部分,默認情況下,該名稱空間通常包含在文件頂部的using System;語句中。 System.DllNotFoundException只是它的完整類型名稱。

通過將using System;放在文件的頂部,您基本上可以爲任何System。*類創建一個快捷方式,在該文件中引用您的引用。例如。你可以但你不需要指定系統命名空間。相反,您可以不使用using System;或其他任何使用方式,但是您可以通過其全名引用文件中的每種類型。

2

沒有區別,只是風格上的差異。在第二個示例中,您需要有一個using System;語句來告訴編譯器在哪裏可以找到DllNotFoundException。

+0

BrandonZeider表示這只是一種風格差異。 :-) – AEMLoviji 2011-04-02 14:18:44

2

System是一個命名空間。命名空間用於組織代碼並處理命名問題。

DllNotFoundExceptionSystem命名空間的一部分,因此它的全名是System.DllNotFoundException

如果在文件頭中包含using System;,則可以使用System命名空間中的所有類,而不指定全名,從而生成DllNotFoundException

2

使用System.Exception是特定的,因爲您可以在不同的庫中具有相同的名稱,您可以指定一個您想要的。埃爾戈,最有可能是相同的,但它意味着如果有選擇,沒有歧義。

2

在.NET命名空間用於組織類型。在這種情況下,可以使用全名來訪問這些類型System.DllNotFoundException,或者在使用using語句時(在本例中使用System),則可以省略所有頂級系統類型的System點前綴。

在回答你的問題,我認爲你應該使用使用,因爲它通常使你的代碼更清潔,因爲它是更少的類型和閱讀使用的類型。

當使用多個usings可以使用,例如,如果在DllNotFoundException系統存在和類型的二義性的Foo其中使用系統,並使用富已鍵入....

當存在多義性(編譯器會抱怨)你可以指定整個類型名稱或添加一個使用MyException = Foo.DllNotFoundException,然後MyException可以用來代替Foo.DllNotFoundException壞名字示例我知道:)

相關問題