C# using语句用于定义一个范围,在此范围的末尾将释放对象,这样的用法比较少见,常见于非托管资源。这些资源在使用后,就必须彻底释放。
学习过C#的人都知道,using是关键字。在MSDN里面一查C#参考(C# Reference),using关键字就会有两个主要用途:
1、作为指令,用于为命名空间创建别名或导入其他命名空间中定义的类型。请参见[using 指令]。
2、作为C# using语句,用于定义一个范围,在此范围的末尾将释放对象。请参见[using 语句]。
其中,第1点就是我们所熟悉using的使用方法,而第二种C# using语句方法我们就比较少用了,它常见于非托管资源(也就是在C++编程里面可能碰到的句柄和设备上下文),这些资源使用完毕后,是必须释放的。在C#里面,由于完全的面向对象编程,这些资源类型都实现了IDisposable接口,因此会使用在捕获异常try...catch语句的finally块中释放资源,代码如下:
- {
-
Font font1 = new Font("Arial", 10.0f);
- try
- {
-
byte charset = font1.GdiCharSet;
- }
- finally
- {
- if (font1 != null)
- ((IDisposable)font1).Dispose();
- }
- }
这样确保调用Dispose,从而保证释放资源。(请注意,使用额外的大括号为对象创建有效的范围而此时如果使用using语句,同样能够获得相同的结果,代码如下:
- using (Font font3 = new Font("Arial", 10.0f), font4 = new Font("Arial", 10.0f))
- {
-
- }
using语句按照正确的方式调用对象上的Dispose方法,并(在您按照前面所示方式使用它时)会导致在调用 Dispose 时对象自身处于范围之外。在using块中,对象是只读的并且无法进行修改或重新分配。
同时还要注意的一点是:
按照规则,当使用IDisposable对象时,应在using语句中声明和实例化此对象。虽然可以在using语句外实例化资源对象,代码如下:
- Font font2 = new Font("Arial", 10.0f);
- using (font2) // not recommended
- {
- // use font2
- }
- // font2 is still in scope
- // but the method call throws an exception
-
float f = font2.GetHeight();
在这种情况下,该对象将在控制权离开 using 块之后保持在范围内,即使它可能将不再具有对其非托管资源的访问权也是如此。换句话说,再也不能完全初始化该对象。如果试图在 using 块外部使用该对象,则可能导致引发异常,如上述代码段3中的font2.GetHeight()调用而产生异常。由于这个原因,通常最好是在 using 语句中实例化该对象并将其范围限制在 using 块中。
在这一点上,如果再使用ildasm工具一查,就会看到代码段1和代码段2生成的代码几乎是完全一样的,而这样使用使用using语句的方式更加简洁、方便。
本文来自liput的博客园文章《C# using指令 心得总结》
相关推荐
学习如何有效地使用using语句管理资源,如数据库连接或文件流,也是提高代码质量和可维护性的关键。 随着对C#的深入学习,你将接触到.NET框架,这是一个庞大的库,包含了大量用于开发各种应用的类和接口。理解如何...
使用using语句可以确保在使用完资源后自动调用Dispose()方法。 8. **UI设计**: 用户界面的设计直接影响用户体验。开发者需要考虑布局合理性、控件的易用性,以及视觉效果。Visual Studio提供了一个强大的设计工具...
在本文中,我们将深入探讨如何使用C#编程语言来实现小程序功能,主要涉及文本文件的读写操作以及对其中特定内容的匹配与替换。C#是Microsoft开发的一种面向对象的编程语言,广泛应用于Windows应用程序、Web应用(如...
在C#中,异常处理使用`try`、`catch`、`finally`语句块,提供了对错误处理的结构化支持。.NET库提供了丰富的预定义类和功能,例如文件I/O、网络通信、数据库连接等,可以直接使用。 总的来说,C#是一门强大而现代的...
.`),字符串插值,using语句的改进等,这些新特性提升了代码的可读性和效率。 8. **调试工具**:Visual Studio 2015提供了强大的调试工具,如断点、监视窗口、快速查看等,帮助开发者高效定位和解决问题。 通过...
学习C#首先要理解变量、数据类型、运算符和控制流(如if语句、for循环和while循环)的概念。例如,声明一个整型变量并赋值: ```csharp int age = 25; ``` 二、类与对象 C#的核心是面向对象编程,因此理解和创建类...
21.10 C#的using语句 21.11 一个有趣的依赖性问题 21.12 手动监视和控制对象的生存期 21.13 对象复活 21.14 代 21.15 用于本地资源的其他垃圾回收功能 21.16 预测需求大量内存的操作能否成功 21.17 编程控制...
### C#实验报告知识点概述 #### 实验一:C#环境编程实验 ...- 通过本实验,学生可以深入了解C#的基础语法和编程技术,包括数据类型、条件语句、循环语句以及数组的使用等。这些基础技能是后续更复杂程序设计的基础。
1. **基础语法**:类似于Java,但有一些C++的影响,如using语句。 2. **.NET框架**:C#运行于之上的基础平台,提供类库和运行时环境。 3. **面向对象编程**:类、接口、继承、多态。 4. **Lambda表达式和LINQ**:...
21.10 C#的using语句 21.11 一个有趣的依赖性问题 21.12 手动监视和控制对象的生存期 21.13 对象复活 21.14 代 21.15 用于本地资源的其他垃圾回收功能 21.16 预测需求大量内存的操作能否成功 21.17 编程控制...
6. **感受与心得**:学生需要记录使用Visual Studio 2008的感受,包括其特点、优势,以及编写程序的主要步骤。 **实验步骤**: 1. 安装Visual Studio 2008。 2. 熟悉IDE的布局和功能。 3. 使用C#创建控制台应用,...
21.10 C#的using语句 21.11 一个有趣的依赖性问题 21.12 手动监视和控制对象的生存期 21.13 对象复活 21.14 代 21.15 用于本地资源的其他垃圾回收功能 21.16 预测需求大量内存的操作能否成功 21.17 编程控制...
21.10 C#的using语句 21.11 一个有趣的依赖性问题 21.12 手动监视和控制对象的生存期 21.13 对象复活 21.14 代 21.15 用于本地资源的其他垃圾回收功能 21.16 预测需求大量内存的操作能否成功 21.17 编程控制...
这里我们主要关注“对单个表的增删改”这一主题,这通常涉及到关系型数据库管理和编程语言如C#的使用。下面我们将深入探讨这个话题。 首先,让我们了解基本概念。在数据库中,表是一种数据结构,用于存储相关数据。...
6. 引入using语句,定义文件路径(例如"E:\\C# 作业\student.txt")。 7. 编写Button1的点击事件代码,检查文件是否存在,如果不存在则创建,然后根据TextBox内容写入文件。 8. 编写Button2的点击事件代码,读取文件...
合理使用C#的`using`语句和避免不必要的对象实例化,可以帮助减少内存开销,提升游戏性能。 总的来说,Celeste游戏的“公用助手”机制集合展示了C#在游戏开发中的广泛应用和灵活性。通过巧妙地运用C#的各种特性,...