广告
返回顶部
首页 > 资讯 > 精选 >C#中怎么实现一个IDisposable接口
  • 876
分享到

C#中怎么实现一个IDisposable接口

2023-06-17 23:06:43 876人浏览 独家记忆
摘要

这期内容当中小编将会给大家带来有关C#中怎么实现一个IDisposable接口,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C#语言有很多值得学习的地方,这里我们主要介绍C#实现IDisposable接口

这期内容当中小编将会给大家带来有关C#中怎么实现一个IDisposable接口,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

C#语言有很多值得学习的地方,这里我们主要介绍C#实现IDisposable接口,包括介绍标准的Dispose模式等方面。

通过C#实现IDisposable接口你可以完成了两个事务:你为客户端及时地释放自己持有的所有受控资源提供了机制;你为客户端提供了一种释放非受控资源的标准途径。这是一个很大的进步。当你在类型中实现了Idisposable接口的时候,客户端可以避免终结操作的开销,你的类就成为.net世界中的"良民"了。

但是在你建立的这种机制中仍然存在一些问题。怎样在衍生类清理自己资源的时候同时也让基类能够清理资源?如果衍生类重载了终结操作,或者添加了自己的C#实现IDisposable接口,那么这些方法必须调用基类,否则,基类就不能正确地进行清理操作。同样,finalize(终结操作)和Dispose参与分担了一些相同的职责。

Finalize方法和Dispose方法的代码几乎相同。而且在重载接口函数后并不像你预料的那样工作。标准的Dispose模式中的第三个方法是一个受保护的虚拟辅助函数,它分解出这些共同的事务,并给衍生类添加一个用于释放资源的"钩子(hook)"。基类包含了核心接口的代码。作为对Dispose()或终结操作的响应,该虚拟函数为衍生类清除资源提供了"钩子":

protected virtual void Dispose( bool isDisposing );

这个重载的方法实现支持finalize和Dispose的必要事务,由于它是虚拟的,它为所有的衍生类提供了一个入口点。衍生类可以重载这个方法,为清除自己的资源提供适当的实现,同时还可以调用基类版本。当isDisposing为真(true)的时候,你可以清除受控和非受控资源,当 isDisposing为假(false)的时候,你只能清除非受控资源。在这两种情况下,你都可以调用基类的Dispose(bool)方法,让它清除自己的资源。

下面有一个简短的例子,它演示了你在实现这种模式的时候所提供的代码框架。MyResourceHog类演示了C#实现IDisposable接口、终结器的代码,并建立了一个虚拟的Dispose方法:

publicclaSSMyResourceHog:IDisposable  {  //已经被处理过的标记  privatebool_alreadyDisposed=false;  //终结器。调用虚拟的Dispose方法  ~MyResourceHog()  {  Dispose(false);  }   //IDisposable的实现  //调用虚拟的Dispose方法。禁止Finalization(终结操作)  publicvoidDispose()  {  Dispose(true);  GC.SuppressFinalize(true);  }   //虚拟的Dispose方法  protectedvirtualvoidDispose(boolisDisposing)  {  //不要多次处理  if(_alreadyDisposed)  return;  if(isDisposing)  {  //TODO:此处释放受控资源  }  //TODO:此处释放非受控资源。设置被处理过标记  _alreadyDisposed=true;  }  }

在受控环境中,你不必为自己建立的每个类型编写终结器,你只需要为存储非受控类型,或者包含了C#实现IDisposable接口的成员的类型编写终结器。即使你只需要Disposable接口,不需要finalizer,也应该同时实现整个模式。否则,你会使衍生类的标准 Dispose思想的实现变得很复杂,从而限制了衍生类的功能。请遵循前面谈到的标准的Dispose思想,这将使你、你的类的用户、从你的类型建立衍生类的用户的生活更加轻松。

上述就是小编为大家分享的C#中怎么实现一个IDisposable接口了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: C#中怎么实现一个IDisposable接口

本文链接: https://www.lsjlt.com/news/294001.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#中怎么实现一个IDisposable接口
    这期内容当中小编将会给大家带来有关C#中怎么实现一个IDisposable接口,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C#语言有很多值得学习的地方,这里我们主要介绍C#实现IDisposable接口...
    99+
    2023-06-17
  • C++中怎么实现一个接口
    C++中怎么实现一个接口,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。定理1:C++接口是依赖的终点。接口不需要依赖任何东西。推论1:依赖C++接口是安全的。不会带来更多的...
    99+
    2023-06-17
  • C#怎么实现IDisposable接口释放非托管资源
    这篇文章主要介绍了C#怎么实现IDisposable接口释放非托管资源的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#怎么实现IDisposable接口释放非托管资源文章都会有所收获,下面我们一起来看看吧。当...
    99+
    2023-06-30
  • C#中怎么实现一个Strategy接口
    C#中怎么实现一个Strategy接口,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C#实现Strategy接口应用常因用户输入、运行平台和部署环境等的不同执行的任务亦不相同。...
    99+
    2023-06-17
  • C#实现IDisposable接口释放非托管资源
    目录完整示例为什么要实现Foo析构函数Dispose方法中为什么要调用GC.SuppressFinalizeReference Why using finalizers is a b...
    99+
    2022-11-13
  • C#中怎么利用类实现一个接口
    这篇文章给大家介绍C#中怎么利用类实现一个接口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C#类实现接口前面我们已经说过,接口定义不包括方法的实现部分。接口可以通过类或结构来实现。我们主要讲述通过类来实现接口。用类来...
    99+
    2023-06-17
  • C#中怎么实现多个接口
    今天就跟大家聊聊有关C#中怎么实现多个接口,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。为了C#实现多个接口,我们可以从接口派生类。这样的派生类必须为所有接口的方法提供实现,除非派生...
    99+
    2023-06-17
  • C#怎么实现多个接口
    这篇文章主要讲解了“C#怎么实现多个接口”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#怎么实现多个接口”吧!学习C#语言时,经常会遇到C#实现多个接口问题,这里将介绍C#实现多个接口问题...
    99+
    2023-06-17
  • C#中怎么声明一个COM接口
    这篇文章给大家介绍C#中怎么声明一个COM接口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。COM 接口在 C# 中表示为具有 ComImport 和 Guid 属性的接口。它不能在其基接口列表中包含任何接口,而且必须...
    99+
    2023-06-17
  • Java 中怎么实现一个Runnable接口
    这期内容当中小编将会给大家带来有关Java 中怎么实现一个Runnable接口,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。但是Java Runnable 接口并没有任何对线程的支持,我们还必须...
    99+
    2023-06-17
  • WCF中怎么实现一个ICommunicationObject接口
    本篇文章为大家展示了WCF中怎么实现一个ICommunicationObject接口,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。WCF托管特性ICommunicationObject接口publi...
    99+
    2023-06-17
  • VB.NET中怎么实现一个IEnumerator接口
    这篇文章给大家介绍VB.NET中怎么实现一个IEnumerator接口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。要VB.NET实现IEnumerator接口,需在实现以下几个函数来支持IEnumerator接口的操...
    99+
    2023-06-17
  • Python中怎么实现一个支付接口
    这篇文章给大家介绍Python中怎么实现一个支付接口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首先定义数据如下:用的测试平台的数据data=[   "", ...
    99+
    2023-06-17
  • 怎么在Springmvc中实现一个Controller接口
    怎么在Springmvc中实现一个Controller接口?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Spring MVC Controller控制器,是MVC中的部分C...
    99+
    2023-05-30
    springmvc controller
  • java实现一个接口调取另一个接口(接口一调取接口二)
    目录java一个接口调取另一个接口工具类springboot中使用(接口一)接口二接口的调用与调用别人的接口别人调用我们的接口,与controller方法开发类似我们调用别人的接口j...
    99+
    2022-11-12
  • PHP中怎么实现一个支付宝接口
    这期内容当中小编将会给大家带来有关PHP中怎么实现一个支付宝接口,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在使用支付宝支付的时候,首先必须注册一个支付宝的账户,然后下载支付宝提供的接口文件,通过支付宝...
    99+
    2023-06-17
  • Java8中怎么实现一个函数式接口
    这篇文章给大家介绍Java8中怎么实现一个函数式接口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。以下我们继续深入Java8函数式编程模型public class Test1 { ...
    99+
    2023-05-30
    java8
  • 怎么在java中创建一个接口实现类
    这期内容当中小编将会给大家带来有关怎么在java中创建一个接口实现类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型...
    99+
    2023-06-14
  • python中怎么实现一个快速支付接口
    今天就跟大家聊聊有关python中怎么实现一个快速支付接口,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。首先定义数据如下:#用的测试平台的数据data=[  &n...
    99+
    2023-06-17
  • 怎么用C#实现一个QQ聊天窗口
    这期内容当中小编将会给大家带来有关怎么用C#实现一个QQ聊天窗口,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。using System;using System.Collections...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作