转自:https://www.jianshu.com/p/5357dc4efcf8

using 关键字有两个主要用途:

(一).作为指令,用于为命名空间创建别名或导入其他命名空间中定义的类型。

(二).作为语句,用于定义一个范围,在此范围的末尾将释放对象。

using指令

①允许在命名空间中使用类型,这样,您就不必在该命名空间中限定某个类型的使用:

using System.Text;

using PC.Company;

②为命名空间或类型创建别名。

using MyCompany = PC.Company;//命名空间的别名。

using Project = PC.Company.Project;//类型的别名

using引入命名空间,并不等于编译器编译时加载该命名空间所在的程序集,程序集的加载决定于程序中对该程序集是否存在调用操作,如果代码中不存在任何调用操作则编译器将不会加载using引入命名空间所在程序集。因此,在源文件开头,引入多个命名空间,并非加载多个程序集,不会造成“过度引用”的弊端。

创建别名的另一个重要的原因在于同一文件中引入的不同命名空间中包括了相同名称的类型,如SharpMap.Geometries.Point与System.Drawing.Point。为了避免出现名称冲突,可以通过设定别名来解决:

using SGPoint = SharpMap.Geometries.Point;

using SDPoint = System.Drawing.Point;

尽管我们可以通过类型全名称来加以区分,但是这显然不是最佳的解决方案。用using指令创建别名,有效的解决了这种可能的命名冲突,才是最佳的解决方案。

using语句

using 语句允许程序员指定使用资源的对象应当何时释放资源。using 语句中使用的对象必须实现 IDisposable 接口。此接口提供了 Dispose 方法,该方法将释放此对象的资源。

①可以在 using 语句之中声明对象。

Font font2 = new Font("Arial", 10.0f);

using (font2)

{

// use font2

}

②可以在 using 语句之前声明对象。

using (Font font2 = new Font("Arial", 10.0f))

{

// use font2

}

③可以有多个对象与 using 语句一起使用,但是必须在 using 语句内部声明这些对象。

using (Font font3=new Font("Arial",10.0f), font4=new Font("Arial",10.0f))

{

// Use font3 and font4.

}

使用规则

①using只能用于实现了IDisposable接口的类型,禁止为不支持IDisposable接口的类型使用using语句,否则会出现编译错误;

②using语句适用于清理单个非托管资源的情况,而多个非托管对象的清理最好以try-finnaly来实现,因为嵌套的using语句可能存在隐藏的Bug。内层using块引发异常时,将不能释放外层using块的对象资源;

③using语句支持初始化多个变量,但前提是这些变量的类型必须相同,例如:

using(Pen p1 = new Pen(Brushes.Black), p2 = new Pen(Brushes.Blue))

{

//

}

④针对初始化对个不同类型的变量时,可以都声明为IDisposable类型,例如:

using (IDisposable font = new Font("Verdana", 12), pen = new Pen(Brushes.Black))

{

float size = (font as Font).Size;

Brush brush = (pen as Pen).Brush;

}

using实质

在程序编译阶段,编译器会自动将using语句生成为try-finally语句,并在finally块中调用对象的Dispose方法,来清理资源。所以,using语句等效于try-finally语句,例如:

Font f2 = new Font("Arial", 10, FontStyle.Bold);

try

{

//执行文本绘制操作

}

finally

{

if (f2 != null) ((IDisposable)f2).Dispose();

}

转载于:https://www.cnblogs.com/changbaishan/p/10938575.html

using 关键字有两个主要用途相关推荐

  1. java中用于定义小数的关键字_Java 中用于定义小数的关键字有两个:( ) 和 ( )。_学小易找答案...

    [填空题]列举至少三种中药饮片现代贮藏方法 [单选题]用于薄壁形零件联接时,应采用 . [填空题]若螺纹的直径和螺纹副的摩擦系数一定, 则拧紧螺母时的效率取决于螺纹的 和 . [单选题]以太网采用的介 ...

  2. 除了允许变量被const函数修改之外,'mutable'关键字是否有任何其他用途?

    前段时间我遇到了一些用<code>mutable关键字标记类的成员变量的代码. 据我所知,它只是允许你修改const方法中的变量: class Foo { private: mutable ...

  3. asp.net高亮显示搜索关键字的两个方法

    方法一.完成查找关键字字体高亮显示 string serkeys(string , string)#region 方法一.完成查找关键字字体高亮显示 string serkeys(string , s ...

  4. 分析函数指针及其两个主要用途

    0.基本的函数指针的声明与初始化 首先我们来声明一个函数. int Max_Int(int a, int b) {return (a>b)?a:b; } 把函数名替换成指针表达式是创建指向函数指 ...

  5. java中用于定义小数的关键字_Java中用于定义小数的关键字有两个:() 和 (),后者精度高于前者。...

    1.[ 填空题 ]给Java中的菜单项设置快捷键所使用的类中对应的构造方法为______. 2.[ 主观题 ][程序设计题]编写一个方法hex3704(),要求将一个十进制正整数n转换成十六进制数,其 ...

  6. java关键字整理_【java基础知识整理】java基础语法之关键字

    一.continue与break continue与break基本都使用与循环中,但是continue指结束所有循环的当前循环,而break是指结束整个循环.下面用代码进行简单实例. 使用contin ...

  7. C# 关键字--using

    using 关键字有两个主要用途:   (一).作为指令,用于为命名空间创建别名或导入其他命名空间中定义的类型.   (二).作为语句,用于定义一个范围,在此范围的末尾将释放对象. using指令   ...

  8. C# using 语法说明

    using 关键字有两个主要用途:   (一).作为指令,用于为命名空间创建别名或导入其他命名空间中定义的类型.   (二).作为语句,用于定义一个范围,在此范围的末尾将释放对象. using指令   ...

  9. Thinking In Java 第四章 控制执行流程

    2019独角兽企业重金招聘Python工程师标准>>> Java并不支持goto语句,但是依旧可以有限制的完成类似的跳转. true 和 false Java不允许我们将一个数字作为 ...

最新文章

  1. PCL学习笔记,区域生长分割(region growing segmentation)
  2. PaddlePaddle, TensorFlow, MXNet, Caffe2 , PyTorch五大深度学习框架2017-10最新评测
  3. 1333和1600能双通道吗_80后童年神作《光环致远星》steam解锁 ?你的电脑还OK吗?...
  4. svn Error:Wrong committed revision number: -1。
  5. 数据库实现列值合并为行
  6. CodeForces - 965E Short Code (字典树上贪心)
  7. spark中的ALS
  8. 第15章 使用DOM的脚本语言
  9. mfc做数独游戏_我终于在iPhone上找到了体验最好的数独游戏
  10. 3gpp协议_C-V2X: 3GPP协议阅读前的一些准备
  11. Linux操作命令(二)
  12. sql 保留整数_Spark 3.0发布啦,改进SQL,弃Python 2,更好的兼容ANSI SQL,性能大幅提升...
  13. 包含min函数的栈 【微软面试100题 第二题】
  14. greensock下载_GreenSock动画平台初学者指南
  15. uboot移植——uboot配置过程详解
  16. java flex blazeds_使用BlazeDS实现Java和Flex通信
  17. abb机器人写字程序实例_ABB机器人编程之程序流程指令(含案例)
  18. 兴业银行银企直联如何查询转账支付后的手续费及退票流水
  19. java digester_xml和java对象的解决:Digester | 学步园
  20. android 系统隐藏和显示虚拟按键的几种方法

热门文章

  1. AJAX 中Sys.WebForms.PageRequestManager的事件激发顺序
  2. asp.net ReportViewer 设置 rdlc textbox的值
  3. Qt利用setStyleSheet设置样式
  4. 数字图像处理--图像二阶导数的推导
  5. 机器学习笔记III: 基于支持向量机的分类预测
  6. Golang笔记——goroutine(协程)
  7. debian查看ip地址命令_鲜为人知而又实用的 Linux 命令大全
  8. ubuntu16 安装mysql5.7_ubuntu16中安装MySQL5.7.29
  9. 怎么设置vscode界面大小_vscode怎么放大界面
  10. encoding python3_关于 Python3 的编码