
Net高级技术——IDisposable_计算机软件及应用_IT计算机_专业资料.doc
8页Net 高级技术 DisposableDisposable 概述GC(垃圾收集器)只能I叫收托管(Managed)内存资源,对于数据库连接、文件句柄、Socket 连接等这些资源(非托管资源,UnManaged)就无能为例,必须程序员白己控制资源的回收 非托管资源:SqlConnection> FileStream 等对于使用非内存资源的类,完全可以自己定义一个销毁资源的方法來供程序员回 收,.net推荐实现Disposable接口 (为了规范非托管资源的回收),在Dispose方法中进行 回收实现了 Disposable接口的对象都可以使用using进行资源管理using就是帮我们做了: 复制代码I FileStream fs = new F.....2try{3 fs.read()....4}5 finally {6 fs.Dispose));7}复制代码实现了 (Disposable接口的对彖都耍进行回收,否则很对能有内存泄露非托管内存资源才需要实现DisposableDisposable 例 了复制代码1 namespace资源回收2{3 class Program4 {5 static void Main(string[] args)6 {7 〃使用using对实现Disposable的类了进行资源管理8 /*拿到一个对象的时候,首先判断这个对象是否实现了 [Disposable接口,如果实现了, 最好就用using包裹住这个对彖,保证这个对彖用完Z后被释放掉,否则很可能出现资源泄 露的问题9*/10 using (Telphone tl = new Telphone())II {12 tl.Open();13 tl.Speak("hello");14 tl.Bomb();15 //tl.Dispose!);//如果在这里调用了 Dispose!)方法释放资源,那么在执行tl.OpenOTT法就出错,线已经被剪断了,无法再打了tl.Open();tl.Speak("l am back!");}//代码执行到这里后,就会调用Dispose方法来进行资源冋收 Console.ReadKey();}}III
结构体测试程序:复制代码1 using System;2 using System.Collections.Generic;3 using System.Linq;4 using Sy stem.Text;5 using System.Drawing;6 namespace 结构体class Programstatic void Main(string[] args)Pers on pl = new Pers on();Pers on p2 = pl;pl.Age = 24;pl.Name = ”孤傲苍狼”;Console.WriteLine(,,pl.Name={0}/pl.Age={l},,/ pl.Name, pl.Age);Console.WriteLine(,,p2.Name={0}/p2.Age={l}l,/ p2.Name, p2.Age);p2.Name = “白虎神皇”;Console.WriteLine(,,pl.Name={0},pl.Age={l}"/ pl.Name, pl.Age);Console.WriteLine(,,p2.Name={0},p2.Age={l},,/ p2.Name, p2.Age);Console.WriteLine(object.ReferenceEquals(pl, p2));Con sole.WriteLine(object.Equals(pl,p2));Console.WriteLine (.(pl == p2);MyPoint pointl = ReadKey new MyPoint();MyPoint point2 = pointl;Console.WriteLine(object.ReferenceEquals(pointl/ point2));//结构体是值类拷贝一份,因此pointl和point2是两个不同的对象pointl.X = 10;pointl.Y = 20;pointl.SayHello();Console.WriteLine("pointl.X={0}zpointl.Y={l}"z pointl.X, pointl.Y);Console.WriteLine("point2.X={0}/point2.Y={l}"/ point2.X, point2.Y);Con sole.ReadKeyf);}〃结构体非常类似于类,但是值类型(拷贝传递),不能被继承 〃lnt32、DateTime等都是结构体,从ValueType继承,值类型。
III
27 * Start方法开始一个计时操作,Stop方法停止计时28 *此吋如果第二次使用Start方法,将继续计吋,最终的计时结果为两次 计时的累加29 *为避免这种情况,在第二次计时前用Reset方法将对象归零这三个方 法都不需要参数30 */31 System.Diag no sties.Stopwatch sw = new System.Diag no stics.Stopwatch();32 sw.Start(); //开始计时3433 int sum = 0;3634 for (int i = 1; i <= intArr.Length; i++)35 {36 s。












