好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

Net高级技术——IDisposable_计算机软件及应用_IT计算机_专业资料.doc

8页
  • 卖家[上传人]:hh****pk
  • 文档编号:282626808
  • 上传时间:2022-04-26
  • 文档格式:DOC
  • 文档大小:73KB
  • / 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

      ///Teiphone 类实现了 Disposable 接口///class Telphone : IDisposable{///III状态III private Telph on eState state;III ///打///public void Open(){if (state == TelphoneState.Disposed){throw new Exceptionf"线已经被剪断,无法打开! “);}state = Telpho neState.Ope n;Console.WriteLine("拿起”);}III ///说话///III 说话内容 public void Speak(string s){if (state != TelphoneState.Open){throw new Exception)"没有连接”);}Con sole.WriteLi ne(s);}///565758596061626364656667686970717273747576777879808182838485III挂掉III public void Bomb(){state = Telpho neState.Close;Console.WriteLinef'挂掉”);}#region Disposable 成员///III实现Disposable接口中的Dispose()方法来释放非托管资源III如何释放非托管资源由程序自己定///public void Disposed{if (state == Telph on eState.Ope n){Bomb();//挂掉}state = Telph on eState.Disposed;Console.WriteLine("剪断线”);}#endregion}///III状态枚举 ///enum Telph on eStateOpen, Close, Disposed86}• Net高级技术——结构体结构休结构体和类的区别:结构体是值类型,类是引用类型结构体非常类似于类,但是值类型(拷贝传递),不能被继承Int32^ DateTime等都是结构体,从ValueType继承,值类型。

      结构体测试程序:复制代码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

      III定义结构体///struct MyPoint{III III定义结构体的属性44III 45public int X {get; set;}46III 47III定义结构体的属性48III 49public int Y {get; set;}50III 51///定义结构体的方法52III 53public void SayHello()54{55Console.WriteLine("HelloWorld!")56}57}58III 59///定义类60III 61class Pers on62{63public int Age {get; set;}64public string Name {get; set;}65}66}Stopwatch的使用复制代码1 using System;2 using System.Collections.Generic;3 using System.Linq;4 using System.Text;5 using System.Threading.Tasks;66 namespace Stopwatch 的使用8{9 class Program10 {1112 ///13 III使用Stopwatch比较for循环和foreach循环的效率14 ///15 III 16 static void Main(string[] args)1819 int[] intArr = new int[1000000];20 for (int i = 1; i <= 1000000; i++)21 {22 intArr[i -1] = i;23 }2424 〃使用Stopwatch统计程序运行的时间25 /*26 Stopwatch提供了几个方法用以控制Stopwatch对象。

      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。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.