C# using垃圾回收详解
简介
语法
C# 语言参考
主要用途
作为语句
Fontfont2=newFont("Arial",10.0f);
using(font2)
{
//usefont2
}
//2.可以有多个对象与using语句一起使用,但是必须在using语句内部声明这些对象,如下所示:
using(Fontfont3=newFont("Arial",10.0f),font4=newFont("Arial",10.0f))
{
//Usefont3andfont4.
}
示例1
usingSystem;
classC:
IDisposable
{
publicvoidUseLimitedResource()
{
Console.WriteLine("Usinglimitedresource...");
}
voidIDisposable.Dispose()
{
Console.WriteLine("Disposinglimitedresource.");
}
}
classProgram
{
staticvoidMain()
{
using(Cc=newC())
{
c.UseLimitedResource();
}
Console.WriteLine("Nowoutsideusingstatement.");
Console.ReadLine();
}
}
作为指令
示例2
namespacePC
{
//Defineanaliasforthenestednamespace.
usingProject=PC.MyCompany.Project;
classA
{
voidM()
{
//Usethealias
Project.MyClassmc=newProject.MyClass();
}
}
namespaceMyCompany
{
namespaceProject
{
publicclassMyClass{}
}
}
}
.下面的示例显示了如何为类定义using指令和using别名:
//cs_using_directive2.cs
//Usingdirective.
usingSystem;
//Usingaliasforaclass.
usingAliasToMyClass=NameSpace1.MyClass;
namespaceNameSpace1
{
publicclassMyClass
{
publicoverridestringToString()
{
return"YouareinNameSpace1.MyClass";
}
}
}
namespaceNameSpace2
{
classMyClass
{
}
}
namespaceNameSpace3
{
//Usingdirective:
usingNameSpace1;
//Usingdirective:
usingNameSpace2;
classMainClass
{
staticvoidMain()
{
AliasToMyClasssomevar=newAliasToMyClass();
Console.WriteLine(somevar);
}
}
}
输出: You are in NameSpace1.MyClass
深入讨论
引言
引入命名空间
误区
namespace Boyspace
{
public class Player
{
public static void Play()
{
System.Console.WriteLine("Boys play football.");
}
}
}
namespace Girlspace
{
public class Player
{
public static void Play()
{
System.Console.WriteLine("Girls play violin.");
}
}
}
以using创建别名,有效的解决了这种可能的命名冲突,尽管我们可以通过类型全名称来加以区分,但是这显然不是最佳的解决方案,using使得这一问题迎刃而解,不费丝毫功夫,同时在编码规范上看来也更加的符合编码要求。
强制资源清理
using (Font f = new Font("Verdana", , FontStyle.Regular))
{
//执行文本绘制操作
Graphics g = e.Graphics;
Rectangle rect = new Rectangle(, , , );
g.DrawString("Try finally dispose font.", f, Brushes.Black, rect);
}//运行结束,释放f对象资源
在上述典型应用中,using语句在结束时会自动调用欲被清除对象的Dispose()方法。因此,该Font对象必须实现IDispose接口,才能使用using语句强制对象清理资源。我们查看其类型定义可知:
using(Pen p1 = new Pen(Brushes.Black), p2 = new Pen(Brushes.Blue))
{
//
}
否则,编译将不可通过。不过,还是有变通的办法来解决这一问题,原因就是应用using语句的类型必然实现了IDisposable接口,那么就可以以下面的方式来完成初始化操作,
using (IDisposable font = new Font("Verdana", , FontStyle.Regular), pen = new Pen(Brushes.Black))
{
float size = (font as Font).Size;
Brush brush = (pen as Pen).Brush;
}
另一种办法就是以使用try-finally来完成,不管初始化的对象类型是否一致。
Font f3 = new Font("Verdana", , FontStyle.Regular);
using (f3)
{
//执行文本绘制操作
}
结论
C# using垃圾回收详解的更多相关文章
- Java虚拟机之垃圾回收详解一
Java虚拟机之垃圾回收详解一 Java技术和JVM(Java虚拟机) 一.Java技术概述: Java是一门编程语言,是一种计算平台,是SUN公司于1995年首次发布.它是Java程序的技术基础,这 ...
- 基于Python对象引用、可变性和垃圾回收详解
基于Python对象引用.可变性和垃圾回收详解 下面小编就为大家带来一篇基于Python对象引用.可变性和垃圾回收详解.小编觉得挺不错的,现在就分享给大家,也给大家做个参考. 变量不是盒子 在示例所示 ...
- python 垃圾回收详解
原文:https://zhuanlan.zhihu.com/p/31150408 总纲 策略和垃圾回收系统工作内容 引用计数详解 标记-清除+分代收集 循环引用 编程应用-常见方法 ex 过程详解 使 ...
- JVM垃圾回收详解
通常,我们在写java程序的时候,似乎很少关注内存分配和垃圾回收的问题.因为,这部分工作,JVM已经帮我们自动实现了. 这样看起来,好像很美好,但是任何事情都有两面性.虽然JVM会自动的进行垃圾回收, ...
- Python垃圾回收详解:引用计数+标记清理+分代回收
Python采用的是引用计数机制为主,标记-清理和分代收集两种机制为辅的策略. 1.引用计数 python中一切皆对象,所以python底层计数结构地就可以抽象为: 引用计数结构体{ 引用计数; 引用 ...
- 深入理解JVM虚拟机3:垃圾回收器详解
JVM GC基本原理与GC算法 Java的内存分配与回收全部由JVM垃圾回收进程自动完成.与C语言不同,Java开发者不需要自己编写代码实现垃圾回收.这是Java深受大家欢迎的众多特性之一,能够帮助程 ...
- .NET 垃圾回收浅解
在说明垃圾回收的实现机制之前,先说明一下垃圾回收存在的背景. 垃圾回收器(GC)是.NET平台中一个很重要的组成部分,.NET垃圾回收机制降低了编写程序的复杂程度,使程序员不用耗费精力去处理析构,成功 ...
- JVM 垃圾回收器详解
小结: 新生代 串行Serial 并行 Parallel(关注吞吐量) 并行ParNew 老年代 串行 Serial Old 并行Para ...
- JVM 的垃圾回收器详解
Parallel Scavenge(Paraller):Parallel Scavenge和ParNew关注的点不一样:ParNew关注的是尽可能缩短暂停的时间,Parallel Scavenge关注 ...
随机推荐
- cocos2dx Menu
---恢复内容开始--- cocos2dx 3.0以后 Menu相关回调函数使用不同.现在列出当前版本可使用的方法. 看见一个说的很仔细的博客,博客源地址 http://blog.sina.com.c ...
- java实现简单的单点登录
java实现简单的单点登录 摘要:单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当中.本文从业务的角度分析了单点登录的需求和应用领域:从技术本身的角度分析了单点登录技术的内部机制和实现 ...
- CSS3 中的按钮效果与进度条
效果如图
- 双人贪吃蛇小游戏C++原创
大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang /*贪吃蛇*/ #include<stdio.h> #include<time. ...
- mongodb 基本语法
成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可以进行数据库的一些操作. 输入help可以看到基本操作命令: show dbs:显示数据库列表 show collections:显示 ...
- Managing TCP Connections in Dynamic Spectrum Access Based Wireless LANs
2010年IEEE Secon的一篇文章.当然了,应该是之前就写好了,发表过,还是直接投到Secon了呢?直接投的吧,Secon不接受已发表过的吧. 本文的着笔点:有线网与DSAN(启用了DSA特性的 ...
- 《Programming WPF》翻译 第5章 8.我们进行到哪里了?
原文:<Programming WPF>翻译 第5章 8.我们进行到哪里了? 样式支持你定义一个策略来设置可视化元素的依赖属性.属性的设置可以被命名以及手动或者编程方式地通过名称应用,或者 ...
- WEB打印插件jatoolsPrinter
为什么选择 jatoolsPrinter 免费版? 支持无预览直接打印 真正免费,不加水印,没有ip或域名限制,不限时间,兼容ie6+ 无须注册,下载即用 提供经过微软数字签名的cab自动安装包,安装 ...
- 方案:抵御 不明SSL证书导致的 中间人攻击
基于SSL数字证书的中间人攻击已经不是一个新技术了,但是我发现很多人并不清楚这种威胁,甚至感觉无所谓,我相信他们是由于短暂的无知蒙蔽了双眼,希望这篇文章可以让更多的人知道这种攻击方式,并清除这种网络威 ...
- 利用智能手机(Android)追踪一块磁铁(一)
之前看到一个外国人用iPhone做了一个追踪磁铁的Demo感觉不错(参考视频:http://v.youku.com/v_show/id_XODM2MjczNzE2.html),然后我就参考做了一个An ...