我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C#中using语句的用法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C#中using语句的用法

一、using语句

using可以算是.NET中新的语法元素,它清楚地说明一个通常比较占用资源的对象何时开始使用和何时被手动释放。当using可以被使用时,建议尽量使用using语句。至今为止,使用using语句发现它带给程序员的只有优点,而没有任何弊端。

在.NET的环境中,托管的资源都将由.NET的垃圾回收机制来释放,而一些非托管的资源则需要程序员手动地将它们释放。.NET提供了主动和被动两种释放非托管资源的方式,即IDisposable接口的Dispose方法和类型自己的Finalize方法。任何带有非托管资源的类型,都有必要实现IDisposable的Dispose方法,并且在使用完这些类型后需要手动地调用对象的Dispose方法来释放对象中的非托管资源。

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

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

先来看一个using语句的基本语法:

using(StreamWriter sw= new StreamWriter())
{
    // 中间处理逻辑
}

在上面代码中,using语句一开始定义了一个StreamWriter的对象,之后在整个语句块中都可以使用sw,在using语句块结束的时候,sw的Dispose方法将会被自动调用。using语句不仅免除了程序员输入Dispose调用的代码,它还提供了机制保证Dispose方法被调用,无论using语句块顺利执行结束,还是抛出了一个异常。下面的代码演示了using的这一保护机制。

using System;

namespace usingDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // 使用using
                using (MyDispose md = new MyDispose())
                {
                    md.DoWork();
                    // 抛出一个异常来测试using
                    throw new Exception("抛出一个异常");
                }
            }
            catch
            {

            }
            finally
            {
                Console.ReadKey();
            }
        }
    }

    /// <summary>
    /// 继承自IDisposable接口,仅仅用来做测试,不使用任何非托管资源
    /// </summary>
    public class MyDispose : IDisposable
    {
        public void Dispose()
        {
            Console.WriteLine("Dispose方法被调用");
        }
        public void DoWork()
        {
            Console.WriteLine("做了很多工作");
        }
    }
}

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

事实上,C#编译器为using语句自动添加了try/finally块,所以Dispose方法能够保证被调用到,所以如下两段代码经过编译后内容将完全一致:

using (MyDispose md = new MyDispose())
{
      md.DoWork();
}

MyDispose md;
try
{
    md = new MyDispose();
    md.DoWork();
}
finally
{
    md.Dispose();
}

在彻底了解了using的实现原理以后,还应该注意一点使用using时常犯的错误,那就是千万不要试图在using语句块外初始化对象 ,如下面代码所示:

MyDispose md = new MyDispose();
using (md)
{
    md.DoWork();
}

看上去似乎没有任何问题,但是在多线程的程序中,上述代码就会有隐患。试想当md被初始化后程序突然产生一个异常而中断,那md对象中的非托管资源将没有机会得到释放,这对于系统来说危害是相当大的。所以在任何时候都应该在using语句中初始化需要使用的对象。

二、总结

using语句为实现了IDisposable的类型对象调用Dispose方法,using语句能够保证使用的对象的Dispose方法在using语句块结束时被调用,无论是否有异常被抛出。C#编译器在编译时自动为using语句加上try/finally块,所以using的本质和异常捕获语句一样,但是语法更为简洁。所有using使用的对象都应该在using语句开始后再初始化,以保证所有的对象都能够被Dispose。

到此这篇关于C#中using语句用法的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C#中using语句的用法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

c#中using的用法

using 语句是一种资源管理机制,自动释放不再需要的资源。它首先创建和初始化资源,然后在作用域内使用资源,最后在离开作用域时自动释放资源。这简化了资源管理,防止了内存泄漏和资源泄漏。C# 中 using 的用法什么是 using 语句?
c#中using的用法
2024-05-15

c++中switch语句的用法

c++ 中的 switch 语句是一种选择结构,用于根据变量或表达式的值执行不同的代码块,可将多个 if-else 语句转换为更简洁的代码。其用法包括:指定一个表达式来评估。为要匹配的常量或字面量值添加多个 case 语句,每个 case
c++中switch语句的用法
2024-05-09

c语言中goto语句的用法

c 语言中 goto 语句允许程序跳转到代码的任何位置,但由于难以维护、调试和违反结构化编程原则,推荐避免使用它。相反,建议使用更结构化的控制流程语句,如 break、continue、switch、循环和条件语句。C 语言中 goto 语
c语言中goto语句的用法
2024-05-09

C#中using word的使用方法

这篇文章主要介绍“C#中using word的使用方法”,在日常操作中,相信很多人在C#中using word的使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#中using word的使用方法”的疑
2023-06-17

C#的try语句用法

C#的try语句用法,需要具体代码示例C#是一种面向对象的编程语言,其中的try语句是一种用于捕获和处理异常的结构。通过try语句,我们可以编写代码来处理可能发生的异常情况,从而改善程序的稳定性和可靠性。在本文中,我们将介绍C#中try语
C#的try语句用法
2024-02-22

C#的switch语句的用法

本篇内容主要讲解“C#的switch语句的用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#的switch语句的用法”吧!C# switch语句在Java中,switch语句只能处理整数。但
2023-06-17

C#using()的使用方法

本文主要介绍了C#using()的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-21

C语言控制语句中循环的用法

本篇内容主要讲解“C语言控制语句中循环的用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言控制语句中循环的用法”吧!入口条件循环:while循环在执行多次循环之前之就已经决定是否执行循环代
2023-06-20

c语言中for语句的用法及规则

for 语句是一种循环语句,用于重复执行语句块。组成部分:1) 初始化:循环开始时执行。2) 条件:每次迭代前检查;为真则继续,为假则结束。3) 递增:每次迭代后执行。规则:1) 三部分均为合法 c 表达式。2) 省略条件默认为无限循环。3
c语言中for语句的用法及规则
2024-04-29

c语言中scanf语句的用法及规则

scanf() 函数从标准输入读取数据并存储在变量中,语法为:int scanf(const char *format, ...)。格式化字符串指定数据类型和格式,变量列表指向要读取数据的变量指针。成功读取数据返回读取的项数,否则返回 eo
c语言中scanf语句的用法及规则
2024-05-12

c语言中goto语句的用法是什么

在C语言中,goto语句用于无条件地将控制转移到程序中的标记位置。其基本语法如下:goto label;其中,label是一个标记的名称,可以在程序中的任何位置定义。使用goto语句的主要目的是在程序中实现跳转,以便在需要的时候可以直接
c语言中goto语句的用法是什么
2024-02-29

C#中的using怎么用

这篇文章主要讲解了“C#中的using怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#中的using怎么用”吧!using的用法:1. using指令:引入命名空间这是最常见的用法,
2023-06-17

sql中using的用法

sql 中 using 子句用于连接表,它指定用于连接记录的列,可用于内连接、外连接、交叉连接等,使用它可以提高查询简洁性、可读性和性能。SQL 中 USING 子句的用法在 SQL 中,USING 子句用于连接两个或多个表,并指定用于连
sql中using的用法
2024-04-28

c++中的if语句怎么用

c++ 的 if 语句是一种条件语句,用于判断某个条件是否为真后执行相应的代码块。语法包括:if (condition) {}:condition 为布尔表达式,决定代码块是否执行。可以嵌套 if 语句检查多个条件,语法为:if (cond
c++中的if语句怎么用
2024-05-10

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录