• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > 探讨C#中Dispose方法与Close方法的区别详解

探讨C#中Dispose方法与Close方法的区别详解

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了dispose on close,dispose close,c close dispose,c#中dispose,c#dispose等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

群里有人问,怎样直接清空堆里的string值。有人建议直接用Dispose()方法;Dispose()销毁了对象,是一种垃圾回收机制。(这里用using或许更好)
当我们开发C#代码的时候,经常碰到一个问题,有些class提供Close(),有些class提供Dispose(),那么Dispose和Close到底有什么区别?

在这里,要明确一下C#程序(或者说.NET)中的资源。简单的说来,C#中的每一个类型都代表一种资源,而资源又分为两类:
托管资源:
由CLR管理分配和释放的资源,即由CLR里new出来的对象;
非托管资源:不受CLR管理的对象,windows内核对象,如文件、数据库连接、套接字、COM对象等;毫无例外地,如果我们的类型使用到了非托管资源,或者需要显式释放的托管资源,那么,就需要让类型继承接口IDisposable。这相当于是告诉调用者,该类型是需要显式释放资源的,你需要调用我的Dispose方法。

首先,Dispose和Close基本上应该是一样的。Close是为了那些不熟悉Dispose的开发者设计的。因为基本上所有的developer都知道Close是干吗的(特别是对于那些有C++背景的developer)。
但是当我们写code时候,如果要实现Close和Dispose的时候,要注意Close和Dispose的设计模式。.net的一些class只提供Close,而且派生自IDisposable,并且隐藏了Dispose方法。是不是觉得很不明白了?

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

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

用者call Close()的时候就会call到你重载的那个Dispose(bool)方法去释放资源。
下面是一个标准的继承了IDisposable接口类型的实现方式,这种实现我们称之为Dispose模式:
</div>

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 探讨C#中Dispose方法与Close方法的区别详解
  • C#基础:Dispose()、Close()、Finalize()的区别详解

相关文章

  • 2017-05-28纯C#实现Hook功能详解
  • 2017-05-28WinForm限制窗体不能移到屏幕外的方法
  • 2017-05-28c# 类和成员的修饰详细介绍
  • 2017-05-28mvc C# JavaScript LigerUI oracle实现用户的注册、登陆验证、登陆
  • 2017-05-28c# AJAX实践VS2005 + RSSToolKit 开发你自己的RSS在线阅读器
  • 2017-05-28C#关机小程序源码
  • 2017-05-28C#读取XML的三种实现方式
  • 2017-05-28在winform下实现左右布局多窗口界面的方法
  • 2017-05-28C#实现把指定数据写入串口
  • 2017-05-28C#实现在图像中绘制文字图形的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • c#数据绑定之向查询中添加参数(.Net连接外部数据库)
    • C#设置自定义文件图标实现双击启动(修改注册表)
    • C# 格式化字符首字母大写的方法
    • C#自动设置IE代理服务器(翻墙软件)代码实现
    • 详谈.net中的垃圾回收机制
    • 通过LinQ查询字符出现次数的实例方法
    • C#验证给定字符串是否为数字的方法
    • C#中的委托数据类型简介
    • C#实现appSettings节点读取与修改的方法
    • 浅谈C#2.0泛型中的变化:default关键字

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有