C#中Using
块的用途是什么?它与局部变量有什么不同?
发布于 2008-10-17 13:51:33
如果该类型实现了IDisposable,它会自动释放该类型。
给定:
public class SomeDisposableType : IDisposable
{
...implmentation details...
}
这些是等效的:
SomeDisposableType t = new SomeDisposableType();
try {
OperateOnType(t);
}
finally {
if (t != null) {
((IDisposable)t).Dispose();
}
}
using (SomeDisposableType u = new SomeDisposableType()) {
OperateOnType(u);
}
第二个更容易阅读和维护。
从C# 8开始,有一个new syntax for using
可以让代码更具可读性:
using var x = new SomeDisposableType();
它没有自己的{ }
块,使用的范围是从声明点到声明它的块的末尾。这意味着你可以避免像这样的事情:
string x = null;
using(var someReader = ...)
{
x = someReader.Read();
}
并拥有以下内容:
using var someReader = ...;
string x = someReader.Read();
发布于 2008-10-17 13:50:55
Using
在留下using
-block之后调用Dispose()
,即使代码抛出异常。
因此,您通常将using
用于需要清理的类,如IO。
所以,这个using代码块:
using (MyClass mine = new MyClass())
{
mine.Action();
}
会做同样的事情:
MyClass mine = new MyClass();
try
{
mine.Action();
}
finally
{
if (mine != null)
mine.Dispose();
}
使用using
更短,也更容易阅读。
发布于 2012-01-13 08:01:39
using语句用于处理实现IDisposable
接口的C#中的对象。
IDisposable
接口有一个名为Dispose
的公共方法,用于释放对象。当我们使用using语句时,我们不需要显式地处理代码中的对象,using语句会处理它。
using (SqlConnection conn = new SqlConnection())
{
}
当我们使用上面的代码块时,在内部生成的代码如下:
SqlConnection conn = new SqlConnection()
try
{
}
finally
{
// calls the dispose method of the conn object
}
有关更多细节,请阅读:Understanding the 'using' statement in C#。
https://stackoverflow.com/questions/212198
复制相似问题