当前位置: 首页 > 编程日记 > 正文

C# using 语法说明

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/haiyabtx/archive/2011/11/28/2266126.html

相关文章:

多行表头_多行表头数据汇总你怎么操作?手动复制粘贴?OUT!用VBA1分钟完成

前景提要(文末提供源码下载)发现小伙伴们的数据结果真的好复杂,不昨天才分享过有多行表头的数据如何汇总合并,今天就有小伙伴反馈,他的数据虽然是有多行表头的,但是又有一些数据没有多行表头,那么在进行批量数据汇总的…

VirtualBox上Ubuntu 共享文件夹

1. virtualbox 菜单栏中设备--》共享文件夹,添加一个共享文件夹,比如共享文件夹路径是D:/share,共享文件夹名称是share。 2. 进入虚拟Ubuntu,在命令行终端输入: sudo mkdir /mnt/sharesudo mount -t vboxsf share /mnt…

tinyMCE

TinyMCE是一个轻量级的基于浏览器的所见即所得编辑器,由JavaScript写成。它对IE6和Firefox1.5都有着非常良好的支持。 功能方面虽然不能称得上是最强,但绝对能够满足大部分网站的需求,并且功能配置灵活简单。另一特点是加载速度非常快&#x…

监管大屏系统_高速公路监管系统大屏可视化

0x00 项目背景该项目用于高速公路监管。高速公路监管包括:高速公路的设备运行情况,设备维护情况,道路维护情况;交通流量分析,交通拥堵分析,拥堵溯源;事故分析,事件信息发布等。0x01设…

Android(java)学习笔记96:layout_weight使用注意事项

1. android:layout_weight使用说明: layout_weight是权重的意思,也就是各个控件所占的比重,用在LinearLayout布局中。当我们使用layout_weight的时候,layout_width和layout_height有三种表示方法 2. android:layout_weight使用之 …

41.uniq命令

uniq命令: 选项:-c:显示每行的重复次数;-u:仅显示未曾重复过的行;-d:仅显示重复过的行; 实例: 转载于:https://blog.51cto.com/itxuezhe/2354162

[JS-JQuery]基础

<noscript> If you see this message, your web browser doesnt support JavaScript or JavaScript is disabled. Please enable JavaScript in your browser settings so Newegg.com can function correctly.</noscript> $(tr:odd) //选择表格的奇数行$(div:visi…

位置偏移问题 绘制_AutoCAD教程之绘制螺栓连接组合图

螺栓、螺母是机械连接件中最为常用的标准件&#xff0c;螺栓连接通常需要组合在一起。下面我们以绘制螺栓连接组合件为例&#xff0c;学习在AutoCAD 2019中移动、复制、旋转等操作的应用方法。1. 新建文件及图层新建一个“无样板公制”文件&#xff0c;新建粗实线、细实线、中心…

spring mvc 控制器方法传递一些经验对象的数组

由于该项目必须提交一个表单&#xff0c;其中多个对象,更好的方法是直接通过在控制器方法参数的数组。 因为Spring mvc框架在反射生成控制方法的參数对象的时候会调用这个类的getDeclaredConstructor方法来获得构造函数, 可是一直报NoSuchMethodException的异常。 依据这种方法…

sendmail configuration on HP-UX

使用mailx 发送邮件mailx -s "Msg title here" xxxxxx.comhello,this is the mail body<--------邮件正文. <-----------------一个点&#xff0c;表示正文结束EOT<--------------上面输入点之后&#xff0c;系统自动出现EOT&#xff0c;表示邮件输入完毕-s…

数据齿轮(DataGear)数据库管理系统 v1.1.1 发布

数据齿轮&#xff08;DataGear&#xff09;数据库管理系统v1.1.1版本发布&#xff0c;此版本是v1.1版本的紧急BUG修复版本&#xff0c;更新内容如下&#xff1a; 修复&#xff1a;修复集成软件包在JRE8及以上版本无法正常运行的BUG&#xff1b;数据齿轮&#xff08;DataGear&am…

带哨兵节点的链_【算法导论】10.2不带哨兵节点和带哨兵节点的双向链表

不带哨兵节点的双向链表即一般的双向链表&#xff0c;有一个头指针指向第一个节点&#xff0c;每个节点有key值和两个指针next和pre&#xff0c;分别指向前后相邻的节点&#xff0c;头结点的preNULL&#xff0c;尾节点的nextNULL&#xff0c;比较明了&#xff0c;但是也有麻烦的…

Android环境结构--安装Eclipse错

在学习安卓第一步。成立了一个开发环境。经验&#xff0c;知道&#xff0c;所以这一步是不容易&#xff0c;因为你觉得&#xff0c;我可能是太幸运了。我见到 题。 首先&#xff0c;安装Eclipse的时候。 【Problem 1】 【问题原因】&#xff1a; &#xff08;1&#xff09; 安装…

ThinkPHP的标签制作

thinkphp的默认标签解析器在Lib/Template/TagLib/TagLibCx.class中里面定义了常用的volist php 等常用thinkphp的标签这里笔者在这个类中添加一个<category>的标签解析标签格式&#xff1a;<category parentid0 ><{$cat.catname}></category>标签作用&…

Go进阶:反射3定律

各位学习Go语言的朋友&#xff0c;周末好&#xff0c;这次跟大家聊一聊Go语言的一个高级话题&#xff1a;反射。 这篇文章是从我过去的学习笔记修改来的&#xff0c;内容主要来自Go Blog的一篇文章《The law of reflection》。 这篇文章主要介绍反射和接口的关系&#xff0c;解…

qlabel可以选中吗_Qt QLabel详解

Qt QLabel详解Qt QLabel详解一、QLabel常用方法1. QLabel设置文本内容ui.label->setText(QStringLiteral("测试中文\n"));2. QLabel设置颜色通过设计器里面的改变样式进行设置&#xff1a;同时可以设置字体、文本对齐方式、背景图片color: rgb(255, 85, 0);backgr…

数据库种类 以及优缺点

1.MySQL MySQL是最受欢迎的开源SQL数据库管理系统&#xff0c;它由 MySQL AB开发、发布和支持。MySQL AB是一家基于MySQL开发人员的商业公司&#xff0c;它是一家使用了一种成功的商业模式来结合开源价值和方法论的第二代开源公司。MySQL是MySQL AB的注册商标。 MySQL是一个快速…

xcode 4.2 不再支持 Window-Based Application 的解决办法(转载)

xcode 4.2 不再支持 Window-Based Application 的解决办法&#xff1a; 1.创建空项目 Empty Application。&#xff08;在Xcode4.2下创建的这个空项目不再有MainWindow.xib文件了。&#xff09; 2.CtrlN&#xff0c;创建User Interface下面的Window&#xff08;选择“i…

java知识概论

转载于:https://www.cnblogs.com/arrows/p/10432301.html

及cp含义_当我们谈论CP时,我们在谈论什么?

2015年B站UP主剪刀手轩辕投稿了一个名为《【魔性拉郎群像】你问我爱你有多深》的视频&#xff0c;让伏黛(伏地魔林黛玉)这个CP走进了众多二次元观众的视野&#xff0c;让这个超级冷门的小众CP一跃成为微博超话&#xff0c;甚至还上了当时的微博热搜。其实早在2010年&#xff0c…

40个出色的Wordpress cms插件

WordPress is a great blogging platform with a potential of being an easy to use content management system. This is the third article of our three-part series, “The Comprehensive Guide for a Powerful CMS using WordPress”. We are taking a look at 40 qualit…

Xcode 添加代码块

我们经常会定义一些retain的property&#xff0c;而且大概每次我们都会像这样写&#xff1a; property (nonatomic, retain) Type *name; 每次都要老老实实的把“property (nonatomic, retain)”敲一遍&#xff0c;这样太累了。 那么能不能像XCode自带的代码提示功能一样&…

软考自查:计算机网络

计算机网络 内容提要 七层模型网络技术标准与协议网络类型与拓扑结构网络规划与设计IP地址与子网划分特殊含义IP地址HTML无线网网络接入技术IPv6OSI/RM七层模型 七层模型练习题 某IP网络连接如图所示&#xff0c;在这种配置下IP全局广播分组不能够通过的路径是_B_。A&#xff1…

restful url 设计规范_restFul接口设计规范

1. 域名应该尽量将API部署在专用域名之下。https://api.example.com如果确定API很简单&#xff0c;不会有进一步扩展&#xff0c;可以考虑放在主域名下。https://example.org/api/2. 版本(Versioning)应该将API的版本号放入URL。http://www.example.com/app/1.0/foohttp://www.…

Dictionary作为数据源绑定,调用c++库中返回为BYTE*的函数,listView项排序

最近在做一个电子档案管理的项目。现在还处于初期&#xff0c;只是做一个简单demo拿去跟客户演示。至于最后谈不谈得下来&#xff0c;到底做不做&#xff0c;反正我是不看好&#xff0c;但没因为这样就马马虎虎、草草了事。这个项目算是b/s加c/s混合体&#xff0c;现在已经做的…

ES6 新特性

ES6 先阅读这个http://gejiawen.github.io/2015/07/28/Javascript/ECMAScript6%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E7%B3%BB%E5%88%97/ECMAScript6%E6%96%B0%E7%89%B9%E6%80%A7%E7%AE%80%E4%BB%8B/ ES6的特性在chrome中默认是关闭的 Visit chrome://flags/#enable-javascrip…

一次被僵尸网络病毒攻击的过程

事件背景 回想起来应该算是去年的事情了, 时值 2019 年 1 月 24 日早上, 当时我正忙碌于开发手头的一个珠宝分销系统项目, 由于已经进行了多日封闭式开发, 项目初见效果, 准备放到内网服务器 A 上跑跑看. 项目的一些功能需要通过公网才能访问, 于是便打算通过一台之前就架设在公…

c2 链路_POS链路不能打开的解决办法

介绍的是POS链路不能打开的解决办法&#xff0c;其原因是C2字节不匹配&#xff0c;这里以华为路由器为组网环境。一、网络环境路由器A有GE接口和2.5G POS接口与其他路由器连接&#xff0c;启动路由器A后&#xff0c;发现GE端口的状态为正常开启&#xff0c;但2.5G POS端口无法开…

“寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面

如果第二次看到我的文章&#xff0c;欢迎下方扫码订阅我的个人公众号&#xff08;跨界架构师&#xff09;哟~本文长度为5723字&#xff0c;建议阅读15分钟。坚持原创&#xff0c;每一篇都是用心之作&#xff5e;这是一篇以程序员视角写的文章&#xff0c;但是内容是互联网行业通…