C# IDispose使用实例

news/2024/11/30 20:48:37/文章来源:https://www.cnblogs.com/kitthe/p/18578848
using System;
using System.ComponentModel;//下面的例子演示了如何创建
//实现IDisposable接口的资源类
//和IDisposable。处理方法。public class DisposeExample
{
//实现IDisposable的基类。
//通过实现IDisposable,你宣布
//这种类型的实例分配稀缺资源。public class MyResource: IDisposable{// 指向外部非托管资源的指针。private IntPtr handle;// 该类使用的其他托管资源。private Component component = new Component();// 跟踪是否调用了Dispose。private bool disposed = false;//类的构造函数。public MyResource(IntPtr handle){this.handle = handle;}//实现IDisposable。//不要将此方法设为虚方法。//派生类不能重写此方法。public void Dispose(){Dispose(disposing: true);//该对象将被Dispose方法清除。//因此,应该调用GC。SuppressFinalize来将此对象从终结队列中移除//并阻止此对象的终结代码从执行第二次。GC.SuppressFinalize(this);}//在两个不同的场景中执行Dispose(bool Dispose)。//如果dispose = true,则直接调用了该方法//或间接地由用户的代码。受管资源和非受管资源//可以处理。//如果dispose = false,则该方法已被//终止器内部的运行时,你不应该引用//其他对象。只能处置非托管资源。protected virtual void Dispose(bool disposing){//检查是否已经调用了Dispose。if(!this.disposed){//如果处置等于true,处置所有已管理的非托管资源。if(disposing){// 处置托管资源。
                    component.Dispose();}//调用适当的方法进行清理//这里的非托管资源。//如果处置为false,//只执行以下代码。
                CloseHandle(handle);handle = IntPtr.Zero;//处理完成。disposed = true;}}//使用interop调用必要的方法清理非托管资源。[System.Runtime.InteropServices.DllImport("Kernel32")]private extern static Boolean CloseHandle(IntPtr handle);//使用c#终结器语法来终结代码。//只有当Dispose方法被调用时,这个终结器才会运行//不被调用。//它给基类一个完成的机会。//不要在该类派生的类型中提供终结器。~MyResource(){//不要在这里重新创建Dispose清理代码。//调用Dispose(Dispose: false)是最优的//可读性和可维护性。Dispose(disposing: false);}}public static void Main(){//在这里插入代码创建//并使用MyResource对象。
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/844263.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习算法】XGBoost原理

一、基本内容基本内容:GBDT的基础上,在损失函数上加入树模型复杂度的正则项与GBDT一样,也是使用新的弱学习器拟合残差(当前模型负梯度,残差方向)GBDT损失函数\[Loss = \sum_{i=1}^{N}L(y_i, y_i^{t}) \] XGboost损失函数\[Loss = \sum_{i=1}^{S}L(y_i, y_i^{t}) + \sum_{…

《网络与系统攻防技术》实验七

1.实验内容及要求 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法。具体实践有 (1)简单应用SET工具建立冒名网站 (2)ettercap DNS spoof (3)结合应用两种技术,用DNS spoof引导特定访问到冒名网站。 二、实验过程 (一)简单应用SET工具建…

HCIP-04 交换高级技术

VLAN聚合通过配置Super-VLAN和Sub-VLAN,不同Sub-VLAN之间进行通信,需要Super-VLAN开启ARP代理。 VLAN聚合既避免了由于子网划分带来的网络地址规划复杂的问题,又能够实现通过VLAN隔离不同广播域的目的。 • MUX VLAN包括Principal VLAN和Subordinate VLAN,同时Subordinate …

基于Jenkins构建微服务发布平台-2

基于Jenkins构建微服务发布平台-2 续——基于Jenkins构建微服务发布平台-1 4 流水线自动发布微服务项目 4.4 Docker阿里云镜像加速失效解决方案 在所有节点上执行。# tee /etc/docker/daemon.json <<-EOF{ "registry-mirrors": [ "https://do.nar…

九种常见二维插值方法及双线性插值的理解

九种常见二维插值方法概述 在数据分析、计算机视觉和图形处理等领域,插值是一种重要的技术,用于估算在已知数据点之间的未知值。以下是几种常用的插值方法的详细介绍。 1. 双线性插值 (Bilinear Interpolation) 双线性插值是一种在二维直线网格上进行插值的技术。它首先在一个…

c# is 和 as 浅看重制版

前言 当年写的比较差:https://www.cnblogs.com/aoximin/p/12965408.html,所以特来重新写一遍。 正文 首先为什么会出现is 和 as 呢? 因为是为了有需要检验的地方,如果直接使用显示转换的话,那么可能直接报错了。 namespace ConsoleApp4 {class Program{static void Main(s…

20222422 2024-2025-1 《网络与系统攻防技术》实验五实验报告

一、实验内容 (1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息: DNS注册人及联系方式 该域名对应IP地址 IP地址注册人及联系方式 IP地址所在国家、城市和具体地理位置 PS:使用whois、dig、nslookup、traceroute、以及各类在线和离线…

安装扫描仪DS-410出现安装Desktop Experience提示

安装Epson Scan所需的某些模块没有安装。安装Desktop Experience之后安装Epson Scan。在Windows server 2012上安装扫描仪出现该错误,该错误为server系统需要桌面支持,默认Windows server 该功能是不安装的需要用户按需求安装。 安装windows server 2012 R2 安装桌面体验勾选…

2019-8-29-02-JS-DOM

图片轮播是Web开发中最常见的组件之一,这是一篇用原生JavaScript实现简单图片轮播的教程。 要实现图片轮播,首先我们要将图片轮播拆分为图片容器、图片、上一页按钮、下一页按钮、底部点选容器、底部点选按钮。 下面我们用HTML代码表示。 ... <div id="page">…

【朝花夕拾】蓝牙WiFi常识篇

一、蓝牙常识点 1、常见英文缩写缩写 英文全称 释义BLE Bluetooth Low Energy低功耗蓝牙BR Basic Rate基本速率,一般说的经典蓝牙就是指BR/EDREDR Enhanced Data Rate增强速率,BR的增强版,一般说的经典蓝牙就是指BR/EDRBluetooth SIG Bluetooth Special Interest Group蓝牙技…

Git入门图文教程(1.5W字40图)--深入浅出、图文并茂

原文:Git入门图文教程(1.5W字40图)🔥🔥--深入浅出、图文并茂 - 安木夕 - 博客园01、认识一下Git!—简介 Git是当前最先进、最主流的分布式版本控制系统,免费、开源!核心能力就是版本控制。再具体一点,就是面向代码文件的版本控制,代码的任何修改历史都会被记录管理起…

20222414 2024-2025-1 《网络与系统攻防技术》实验七实验报告

1.实验内容及要求 1.1本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法。具体实践有 (1)简单应用SET工具建立冒名网站 (2)ettercap DNS spoof (3)结合应用两种技术,用DNS spoof引导特定访问到冒名网站。 1.2本周学习内容 (1)web安全基础:…