c#中Using块的目的是什么?它和局部变量有什么不同?
当前回答
using语句用于处理c#中实现IDisposable接口的对象。
IDisposable接口有一个名为Dispose的公共方法,用于释放对象。当我们使用using语句时,我们不需要在代码中显式地处理对象,using语句会处理它。
using (SqlConnection conn = new SqlConnection())
{
}
当我们使用上面的代码块时,内部生成的代码是这样的:
SqlConnection conn = new SqlConnection()
try
{
}
finally
{
// calls the dispose method of the conn object
}
更多细节请阅读:理解c#中的“using”语句。
其他回答
从MSDN:
C#, through the .NET Framework common language runtime (CLR), automatically releases the memory used to store objects that are no longer required. The release of memory is non-deterministic; memory is released whenever the CLR decides to perform garbage collection. However, it is usually best to release limited resources such as file handles and network connections as quickly as possible. The using statement allows the programmer to specify when objects that use resources should release them. The object provided to the using statement must implement the IDisposable interface. This interface provides the Dispose method, which should release the object's resources.
换句话说,using语句告诉. net一旦不再需要using块中指定的对象,就释放它。
在Using块离开后使用Dispose(),即使代码抛出异常。
因此,您通常将using用于需要在它们之后清理的类,例如IO。
所以,这个使用block:
using (MyClass mine = new MyClass())
{
mine.Action();
}
会做同样的事情:
MyClass mine = new MyClass();
try
{
mine.Action();
}
finally
{
if (mine != null)
mine.Dispose();
}
使用“使用”更简短,更容易阅读。
还要注意,通过using实例化的对象在using块中是只读的。请参考这里的官方c#参考。
它实际上只是一些语法糖,不需要对实现IDisposable的成员显式调用Dispose。
在using块中放置代码可以确保一旦控件离开块,对象就会被处理(尽管不一定会被收集)。
推荐文章
- 实体框架核心:在上一个操作完成之前,在此上下文中开始的第二个操作
- 如何为构造函数定制Visual Studio的私有字段生成快捷方式?
- 为什么Visual Studio 2015/2017/2019测试运行器没有发现我的xUnit v2测试
- 如何使用JSON确保字符串是有效的JSON。网
- AppSettings从.config文件中获取值
- 通过HttpClient向REST API发布一个空体
- 如何检查IEnumerable是否为空或空?
- 自动化invokerrequired代码模式
- 没有ListBox。SelectionMode="None",是否有其他方法禁用列表框中的选择?
- 在c#代码中设置WPF文本框的背景颜色
- 在c#中,什么是单子?
- c#和Java中的泛型有什么不同?和模板在c++ ?
- c#线程安全快速(est)计数器
- 如何将此foreach代码转换为Parallel.ForEach?
- 如何在iis7应用程序池中设置。net Framework 4.5版本