我是C#的新手,一直是pascal爱好者,直到我在C#的Depth.In Delphi中找到了一个try{}语句,这个语句也是用C#实现的。
但是,我看到你们中的一些人提到“使用(){}比尝试{}更好”。
下面是一个例子:
//This might throw an exception
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.Connect(ip, port);
//Try statement
try
{
sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.Connect(ip, port);
catch
{
}
//using(){}
using(sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
{
sock.Connect(ip, port);
}我的问题:
提前感谢!
发布于 2009-04-22 12:36:48
使用和尝试是两个非常不同的事情,并且是完全正交的。
如果出现异常且不在try块中,则堆栈将展开,直到找到适当的异常处理程序。这与using语句无关。
使用using {}时,要确保对象在使用后被正确整理--在示例中,sock将在using块之后被正确地释放。
有关使用using seach在web上(大约)用于"IDisposable“的更多信息。
发布于 2009-04-22 12:34:54
在创建(并使用)实现IDisposable的新对象时,将使用using语句。using语句将始终释放对象,即使在using块中引发异常也是如此。
try/catch语句通常具有完全不同的用途,但是try/catch/finally或try/finally中的finally块与无条件执行相同的用途。使用状态为您购买自动调用处理。
我推荐大卫海登的文章:C#代码评审-使用语句的C# -尝试/最后- IDisposable - Dispose() - SqlConnection - SqlCommand
发布于 2009-04-22 12:36:05
using与尝试/捕捉完全不同。using块用于确保释放IDisposable ist,这意味着调用了Dispose()。尝试、捕捉并最终处理异常。using块类似于:
IDisposable d; try { d = m; } finally { d.Dispose(); }这与using之间的区别在于变量的作用域,因为using是在块中创建的。
m是任何对象构造的占位符。有关更多信息,请参见using,IDisposable下的MSDN。特别是有关处理、垃圾收集和非托管资源的信息值得阅读。
https://stackoverflow.com/questions/776990
复制相似问题