C# using语句,C#中的using,C#中using语句的用法

C# using语句,C#中的using,C#中using语句的用法

本文介绍了C#中using语句的用法,并通过示例代码进行了详细介绍。对大家的学习或者工作都有一定的参考价值,有需要的朋友可以参考一下。

一、using语句

使用可视为中的新语法元素。NET,它清楚地解释了一个资源密集型对象什么时候会被使用和手动释放。当可以使用using时,建议尽可能使用using语句。到目前为止,使用using语句只给程序员带来了好处,没有坏处。

在。NET环境中,托管资源将由。而一些非托管资源需要程序员手动释放。NET提供了释放非托管资源的主动和被动方式,即IDisposable接口的Dispose方法和类型本身的Finalize方法。任何带有非托管资源的类型都需要实现IDisposable的Dispose方法,使用这些类型后,需要手动调用对象的Dispose方法来释放对象中的非托管资源。

如果类型正确地实现了Finalize方法,那么即使不调用Dispose方法,非托管资源最终也会被释放,但随后资源已经被无畏地占用了很长时间。

using语句的作用是提供一种高效的方法来调用object Dispose方法。对于任何类型的IDisposable接口,都可以使用using语句,但是对于那些没有实现IDisposable接口的类型,使用using语句会导致编译错误。

让我们先来看看using语句的基本语法:

使用(StreamWriter sw=new StreamWriter())

{

//中间处理逻辑

}

在上面的代码中,using语句在开头定义了一个StreamWriter对象,然后就可以在整个语句块中使用sw了。在using语句块的末尾,将自动调用sw的Dispose方法。using语句不仅消除了程序员输入Dispose调用代码的需要,而且提供了一种机制来确保调用Dispose方法,无论using语句块是成功执行还是引发了异常。下面的代码演示了使用的这种保护机制。

使用系统;

命名空间使用演示

{

班级计划

{

静态void Main(string[] args)

{

尝试

{

//使用using

使用(MyDispose md=new MyDispose())

{

MD . DoWork();

//使用引发异常进行测试

抛出新异常(“抛出异常”);

}

}

捕捉

{

}

最后

{

控制台。read key();

}

}

}

///摘要

///从IDisposable接口继承而来,只用于没有任何非托管资源的测试。

////摘要

公共类MyDispose : IDisposable

{

公共void Dispose()

{

控制台。WriteLine(“Dispose Dispose方法被调用”);

}

public void DoWork()

{

控制台。WriteLine('做了很多工作');

}

}

}

在上面的代码中,using语句块引发了一个异常,该异常直到using语句完成后才被捕获。由于using语句,即使抛出异常,MyDispose的对象md的DIspose方法仍然被调用。程序输出结果如下:

实际上,C#编译器会自动为using语句添加一个try/finally块,这样Dispose方法就可以被调用到,所以下面两段代码编译后会完全一致:

使用(MyDispose md=new MyDispose())

{

MD . DoWork();

}

MyDispose md

尝试

{

MD=new my dispose();

MD . DoWork();

}

最后

{

MD . Dispose();

}

在彻底理解了using的实现原理之后,还应该注意使用using时经常犯的错误,即永远不要尝试在using语句块之外初始化对象,如下面的代码所示:

my dispose MD=new my dispose();

使用(md)

{

MD . DoWork();

}

看似没有问题,但在多线程程序中,上面的代码会有隐患。想象一下,当md初始化的时候,程序突然产生异常,被中断,那么md对象中的非托管资源将没有机会被释放,这对系统是相当有害的。因此,要使用的对象应该随时在using语句中初始化。

二、总结

using语句调用实现IDisposable的type对象的Dispose方法。using语句可以确保在using语句块的末尾调用used对象的Dispose方法,而不管是否引发异常。# C编译器在编译时自动在using语句中加入try/finally块,所以using的本质和异常捕捉语句是一样的,只是语法更简洁。using使用的所有对象都应在using语句启动后进行初始化,以确保所有对象都可以被释放。

关于在C#中使用using语句的这篇文章到此结束。希望对大家的学习有帮助,也希望大家多多支持。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 设计一个简单的C#控制台应用程序,C#控制台程序,C# 创建控制台应用程序
  • 深入解析windows第8版,深入解析C#(第4版)
  • 数组代码,c# 数组操作,C# 数组实例介绍(图文)
  • 学会C#要多久,学会c#要多久,c#学习之30分钟学会XAML
  • 回溯法01背包问题c,回溯法求解01背包问题伪代码,C#使用回溯法解决背包问题实例分析
  • xml文件转义字符,xml转意字符,C# XML中的转义字符操作
  • winform 进度条控件,c# 进度条使用
  • winform 进度条控件,c# 进度条使用,C#使用winform实现进度条效果
  • winform backgroundworker,c# isbackground
  • winform backgroundworker,c# isbackground,C# BackgroundWorker用法详解
  • lua与c#交互,lua c#
  • lua与c#交互,lua c#,ToLua框架下C#与Lua代码的互调操作
  • linq c#,linq原理 c#
  • linq c#,linq原理 c#,c#中LINQ的基本用法实例
  • java decimal保留两位小数,sql中decimal函数保留2位小数,C#中decimal保留2位有效小数的实现方法
  • 留言与评论(共有 条评论)
       
    验证码: