using 用法拾忆
using 用法主要包括三种:
1、引用外部命名空间以及外部命名空间中定义的类型(指令)
2、创建命名空间别名,避免因名称相同造成的冲突(指令)
3、定义资源使用范围,在范围结束后释放资源对象(语句)
1. 引用外部命名空间或者类型,允许在在本命名空间内使用引用命名空间类型:
using System.IO;
using System.Linq;
using System.Text;
2.创建命名空间别名,区别相同名称命名空间或类型:
using txt= System.Text;
using com=Common.Log;
using model=Model.log;
区别不同命名空间下相同类型也可以通过书写全名称引用,不过通过别名的直接引用更简洁。
3.using语句块,可以根据需要适时的释放资源对象。需要注意的是using语句块定义的资源对象必须实现了IDisposable接口,
以通过dispose函数对资源对象进行销毁释放:
单个资源对象
Pen pen=new Pen(Brushes.Red)
using (pen)
{
}
using (Pen pen=new Pen(Brushes.Red))
{
}
同类型多个资源对象
using (Pen pen=new Pen(Brushes.Red),blackPen=new Pen(Brushes.Black))
{
}
多类型多个资源对象
using (IDisposable pen = new Pen(Brushes.Red), image = new FileStream(@"D:\file.txt",FileMode.Create))
{
}
注:单个资源对象时,对象的声明可以在using内部也可以是外部已经声明过的对象;多个资源对象时必须是在using内部进行声明,
而且using在编译期会对类型进行检查,必须保证对象类型一致;多种类型的资源对象则需要声明为IDisposable类型,初始化为使用
的不同类型的资源对象;
using语句块的实质等效于try..finally语句块,因为代码在编译期间会把using语句块转换为try...finally语句块进行处理,而对资源对象
的销毁工作则在finally内通过调用Idisposable的dispose函数进行销毁,所以对象类型必须继承IDisposable接口。在使用using语句块
时应注意不能多层嵌套using语句块,因为内层语句块中可能出现bug,这会造成外层using无法正常进行资源的释放。此使用场景应该选择使用
try...finally进行资源对象的销毁更优。
try
{
}
finally
{
//资源销毁;
}
using 用法拾忆的更多相关文章
- .Net拾忆:从List去除重复-拾忆集合
方法1: private static List<int> DistinctList(List<int> list) {//去除重复 HashSet<int> ha ...
- #ifdef,#else,#endif,#if 拾忆
预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作.说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译.这样做的好处是,经过处理后的代码,将会变的很精短. ...
- .NET拾忆:反射的本质——元数据
反射主要使用的命名空间: System.Reflection System.Type System.Reflection.Assembly 本质:元数据 反射的本质其实是使用元数据:元数据其实就是程序 ...
- Libero 使用拾忆
使用Libero软件进行管脚分配的时候可以使用脚本语言,详细的使用说明见des_constraints_ug.pdf(在Libero安装目录下寻找) 如: set_io srame_oe -REGIS ...
- jquery实现的网页选项卡(拾忆)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Python拾忆--多线程的socket服务器
阳光明媚的午后,想想最近要开始从写Java到写Python了,就随手打开电脑来体验一下Python与Java之间的不同吧~ 记得我还在上大二的时候,那个时候才开始学Java,最感兴趣的就是Java书最 ...
- SQL SERVER 高级编程 - 自定义函数 拾忆
每个人都很忙,但是花10分钟复习下,总结下基础东西还是很有益处的. 背景: 总结一句,使用简便,还能递归,是的SQL更简洁,相对比一大堆的关联语句,而且关联一大堆还不一定实现特定功能.而且共用部分可以 ...
- spring mvc DispatcherServlet详解之拾忆工具类utils
DispatcherServlet的静态初始化 /** * Name of the class path resource (relative to the DispatcherServlet cla ...
- Js拾忆
instanceof运算符:他是判断一个构造函数的prototype是否在对象的原型链上查找到 var a = new Array(); console.log(a instanceof Array) ...
随机推荐
- php内置函数分析之current()、next()、prev()、reset()、end()
current()初始指向插入到数组中的第一个单元 next() 将数组的内部指针向前移动一位 prev() 将数组的内部指针倒回一位 reset() 将数组的内部指针指向第一个单元 end() 将数 ...
- 题解 P3166 【[CQOI2014]数三角形】
做完之后看了看题解,怎么一篇和我思路一样的也没有...我好慌啊qwq(所以一定是窝太弱了看不懂dalao的思路) 好吧窝的方法确实很奇怪: 核心代码只有3行 输入 循环 输出 一气呵成 是题解中的豪杰 ...
- OmniGraffle 7使用的探索
进去后可以将界面简化为4个主要区域:工具栏.工具栏.检查器和画布. 1.画布是在项目中创建.编辑和移动对象的地方 2.删除画布 选择编辑 画布删除画布 3.OmniGraffle项目至少需要一个画布 ...
- node创建项目,要ejs模板引擎,不要jade怎么办?
创建项目时:express ejs blog,生成的是.jade文件怎么办?我想要的是ejs的呀 上述语句不仅名字不对,生成文件的格式也不是我想要的. 不妨试试:express -e blog 这下就 ...
- MySQL把多条数据给汇总成一条数据
用到的是这个函数: group_concat() select group_buying_id, group_concat(app_user_ids) from org_user_group grou ...
- facebook第三方登陆实践
未完,待续... 1.注册 到Facebook官网注册开发者账号,创建应用(开发者平台 https://developers.facebook.com),如果尚未注册账号的请注册账号并进行登录) 注册 ...
- CF543B Destroying Roads 枚举 + 思维 + BFS
Code: #include <bits/stdc++.h> #define ll long long #define setIO(s) freopen(s".in", ...
- k8s登录harbor报错:Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request cance
[root@k8s-node02 ~]# docker login 192.168.180.105:1180 Username: admin Password: Error response from ...
- nginx 缓存设置
浏览器缓存原理 浏览器缓存 HTTP协议定义的缓存机制(如:Expires:Cache-control等) 2.浏览器无缓存 3.客户端有缓存 校验过期机制 校验是否过期 ...
- jsoncpp 源码编译与简单使用
******************************************************标准C++实现jsoncpp 源码使用编译(VC2012 MFC)(Qt5.2 Widget ...