2011-04-02 61 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坏名字示例我知道:)

相关问题