首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C#使用块是什么?我为什么要使用它?

C#使用块是什么?我为什么要使用它?
EN

Stack Overflow用户
提问于 2008-10-17 13:49:21
回答 8查看 335.5K关注 0票数 306

C#中Using块的用途是什么?它与局部变量有什么不同?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-10-17 13:51:33

如果该类型实现了IDisposable,它会自动释放该类型。

给定:

代码语言:javascript
复制
public class SomeDisposableType : IDisposable
{
   ...implmentation details...
}

这些是等效的:

代码语言:javascript
复制
SomeDisposableType t = new SomeDisposableType();
try {
    OperateOnType(t);
}
finally {
    if (t != null) {
        ((IDisposable)t).Dispose();
    }
}
代码语言:javascript
复制
using (SomeDisposableType u = new SomeDisposableType()) {
    OperateOnType(u);
}

第二个更容易阅读和维护。

从C# 8开始,有一个new syntax for using可以让代码更具可读性:

代码语言:javascript
复制
using var x = new SomeDisposableType();

它没有自己的{ }块,使用的范围是从声明点到声明它的块的末尾。这意味着你可以避免像这样的事情:

代码语言:javascript
复制
string x = null;
using(var someReader = ...)
{
  x = someReader.Read();
}

并拥有以下内容:

代码语言:javascript
复制
using var someReader = ...;
string x = someReader.Read();
票数 365
EN

Stack Overflow用户

发布于 2008-10-17 13:50:55

Using在留下using-block之后调用Dispose(),即使代码抛出异常。

因此,您通常将using用于需要清理的类,如IO。

所以,这个using代码块:

代码语言:javascript
复制
using (MyClass mine = new MyClass())
{
  mine.Action();
}

会做同样的事情:

代码语言:javascript
复制
MyClass mine = new MyClass();
try
{
  mine.Action();
}
finally
{
  if (mine != null)
    mine.Dispose();
}

使用using更短,也更容易阅读。

票数 121
EN

Stack Overflow用户

发布于 2012-01-13 08:01:39

using语句用于处理实现IDisposable接口的C#中的对象。

IDisposable接口有一个名为Dispose的公共方法,用于释放对象。当我们使用using语句时,我们不需要显式地处理代码中的对象,using语句会处理它。

代码语言:javascript
复制
using (SqlConnection conn = new SqlConnection())
{

}

当我们使用上面的代码块时,在内部生成的代码如下:

代码语言:javascript
复制
SqlConnection conn = new SqlConnection() 
try
{

}
finally
{
    // calls the dispose method of the conn object
}

有关更多细节,请阅读:Understanding the 'using' statement in C#

票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/212198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档