zoukankan      html  css  js  c++  java
  • Close与Dispose的区别

    Close与Dispose的区别:

    Close 是停业整顿,停业了,可以通过公关,再重开,物还是原来的物;
    只是关闭而已,没有释放真正的释放资源,可以重新打开;
    Close是关门Dispose是破产;

    Dispose 是炸毁,炸毁了,想再开张,就只有重头建起;
    是把对象销毁,将不再存在;
    Close是关门Dispose是破产;

    那我的ShowDialog窗体用完后该如何?
    看你在什么时候new的看它的生命期罗……
    若是在一个button的click里new一个Form出来ShowDialog,用完后close也可以Dispose也行,button的click完了,你不收拾它,它Form也会被阎罗王的马仔(垃圾收集器)带走。
    若是一个窗体需共用ShowDialog的Form,是在外面new的,你用完后只需Close就行了,因为别人还要用。但是要在什么时候Dispose呢?那就要看你是在什么时候什么地点new的罗,找一个与它门当户对的地方与时候来Dispose它即可。例如你在Form_Load时new的,那就在Form_UnLoad时来Dispose它了。

    下面是另一位园主的看法http://www.cnblogs.com/kevinwan/archive/2007/01/16/621869.html,说的也不错哦

    当我们开发C#代码的时候,经常碰到一个问题,有些class提供Close(),有些class提供Dispose(),那么Dispose和Close到底有什么区别?

    首先,Dispose和Close基本上应该是一样的。Close是为了那些不熟悉Dispose的开发者设计的。因为基本上所有的developer都知道Close是干吗的(特别是对于那些有C++背景的developer)。

    但是当我们写code时候,如果要实现Close和Dispose的时候,要注意Close和Dispose的设计模式。.net的一些class只提供Close,而且派生自IDisposable,并且隐藏了Dispose方法。是不是觉得很不明白了?

    对这些class来说,关键在于它们显式的(explicitly)实现了IDisposable。对于隐式实现来说,你只需要调用"new A().Dispose()",但是对于显式实现来说,Dispose不会是这个class的成员函数。唯一的调用方式是你先要cast到 IDisposable才行。(“new A().Dispose()”编译不过,但是“((IDisposable)new A()).Dispose()”可以编译过)。所以这样就符合了设计的要求:提供Close(),隐藏Dispose(),并且实现了 IDisposable接口。

    在.net的framework里,Close()被设计成public的,并且在Close()里面call被隐藏的Dispose(); Dispose()去call另一个virtual的Dispose(bool)函数。所以如果你从这个class继承,你就必须实现Dispose (bool)方法。

    调用者call Close()的时候就会call到你重载的那个Dispose(bool)方法去释放资源。

  • 相关阅读:
    UVa 1354 天平难题 (枚举二叉树)
    广西邀请赛总结
    UVa 12118 检查员的难题 (dfs判连通, 构造欧拉通路)
    UVA
    Uva 127 "Accordian" Patience (模拟)
    UVA 10539 Almost Prime Numbers( 素数因子)
    HDU 1272 小希的迷宫(并查集)
    HDU 1213 How Many Tables (并查集)
    POJ 2236 Wireless Network(并查集)
    HDU 1233 还是畅通工程 ( Kruskal或Prim)
  • 原文地址:https://www.cnblogs.com/lhws/p/3599836.html
Copyright © 2011-2022 走看看