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/lgx5/p/5851512.html

C# 关键字--using相关推荐

  1. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  2. java中实现具有传递性吗_Java中volatile关键字详解,jvm内存模型,原子性、可见性、有序性...

    一.Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的. Java内存模型规定了所有的变量都存储在主内存中.每条线程中还有自己的工作内存,线程的工作 ...

  3. volatile关键字之全面深度剖析

    引言 volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在Java 5之后,volatile关键字 ...

  4. mysql屏蔽关键字实现方法_PHP屏蔽过滤指定关键字的方法

    本文实例讲述了PHP屏蔽过滤指定关键字的方法.分享给大家供大家参考.具体分析如下: 实现思路: 一.把关键字专门写在一个文本文件里,每行一个,数量不限,有多少写多少. 二.PHP读取关键字文本,存入一 ...

  5. Java 静态变量,静态方法,静态常量(java static 关键字)

    Java 静态变量,静态方法,静态常量  就是变量 ,方法,常量前面添加了static 关键字 为什么要使用静态的呢 有时候在处理问题时会需要两个类在同一个内存区域共享一个数据, 不如现在 Main ...

  6. Java this 关键字使用

    this 引用就是本类的一个对象 理解这句话看下面一段代码 package me; public class Me {String name; //成员变量int age;public Me(Stri ...

  7. java 关键字(面试题)

    学而时习之,温故而知新. 今天群里有人问java中true ,false 是关键字吗, 这里记录下,不是关键字,我还特意翻看之前的书看看 下面是 Java 语言保留使用的 50 个关键字: 关键字 g ...

  8. java中标识符,关键字,数据类型

    什么是标识符? 在java语言中用来给一个类,变量或方法命名的符号 标识符的命名规则 标识符可以由字母.数字.下划线(_).美元符($)组成,但不能包含 @.%.空格等其它特殊字符,不能以数字开头. ...

  9. iOS面试题整理---关键字!!!

    关键字整理 static 1.static全局变量与普通的全局变量有什么区别? 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量.全局变量本身就是静态存储方式, 静态全局变量当 ...

  10. private关键字和构造方法

    1.private: A: 是一个修饰符 B:可以 修饰成员变量,也可以修饰成员方法 C:被private修饰的成员只能在本类中访问 D:针对private修饰的成员变量,可以用getXxx()和se ...

最新文章

  1. Spring Cache
  2. Windows 之 删除文件出现“该项目不在请确认该项目的位置”
  3. caffe使用训练好的模型对自己的一张图片进行测试
  4. 谷歌大脑AutoML最新进展:不断进化的阿米巴网络
  5. python爬虫实例100例-python 爬虫实例
  6. 原理优先的重要性_就signal探讨
  7. Notepad++软件的下载与安装步骤(图文详解)
  8. JQuery控制div外点击隐藏,div内点击不会隐藏
  9. C语言谭浩强第三版例题及课后题汇总
  10. PPT(默认设置快捷键的使用)
  11. fprom预测结果内容_启动子分析预测数据库
  12. 运维面试必问的监控系列高频面试题(2021年最新版)
  13. Java代码实现点赞功能
  14. 江苏省电子税务局中文点选验证码识别研究
  15. java查询数据导出excel并返回给浏览器下载
  16. python3+selenium4自动化测试操作启动不同的浏览器-基础篇2
  17. STC15 串口一 接收 发送 基本程序
  18. java 绘制图形实验心得体会_绘图实习心得体会3篇
  19. birthday中文是什么_birthday是什么意思_birthday在线翻译_英语_读音_用法_例句_海词词典...
  20. Devops 基础篇之使用Jenkins构建自由风格、Maven、流水线项目(四)

热门文章

  1. 一个网友提供的SCI 投稿全过程信件模板一览
  2. 在vSphere Client使用模板部署虚拟机 系统硬盘空间扩展
  3. 黑盒测试实践---day2
  4. GTC16浪潮展示多形态深度学习服务器
  5. Apache 配置SSL网站
  6. 转 把GIF图片转换成单个连续的图片 转 tif 等任意多帧图片转换bmp 或者gif等格式...
  7. jQuery学习笔记开篇
  8. Q107:Linux系统下GDB对PBRT-V3进行debug
  9. 大数据分析体系由哪些层级构成
  10. 卫星轨道的估计问题(Matlab)(二):扩展卡尔曼滤波(EKF)对新问题的尝试