首页 > 编程语言 >c#中的using,IDisposable的类型,Dispose方法

c#中的using,IDisposable的类型,Dispose方法

时间:2022-08-14 17:55:54浏览次数:47  
标签:IDisposable 语句 c# Dispose 对象 using 资源

https://www.jb51.net/article/241577.htm

using语句为实现了IDisposable的类型对象调用Dispose方法,using语句能够保证使用的对象的Dispose方法在using语句块结束时被调用,无论是否有异常被抛出。C#编译器在编译时自动为using语句加上try/finally块,所以using的本质和异常捕获语句一样,但是语法更为简洁。所有using使用的对象都应该在using语句开始后再初始化,以保证所有的对象都能够被Dispose。

 

IDisposable的类型:

https://www.cnblogs.com/pilgrim/p/9276930.html

C#的每一个类型都代表一种资源,而资源又分为两类:

  • 托管资源  由CLR管理分配和释放的资源,即从CLR里new出来的对象。
  • 非托管资源  不受CLR管理的对象,如Windows内核对象,或者文件、数据库连接、套接字、COM对象等。

  如果类型用到了非托管资源,或者需要显式释放托管资源,那么需要让类型继承接口IDisposable。记住:如果类型需要显式释放资源,那么一定要继承IDisposable接口。( 针对托管资源,DotNet的垃圾回收器会自动地回收托管资源,而非托管的资源,则需要自己进行处理。

那么,我们可以使用C#的Dispose模式来方便地释放这些资源)

继承IDisposable接口,可以使用using语法糖。在using语句代码块内,可以使用声明的对象,当语句离开代码块后,系统自动释放资源:

//使用using方法,当语句离开代码块后,using内的对象自动释放
using (SampleClass sample = new SampleClass())
{
//……
}
//以上代码相当于下面的代码
SampleClass sample0 = new SampleClass();
try
{
//……
}
finally
{
sample0.Dispose();
}

 

 

搜索

复制

标签:IDisposable,语句,c#,Dispose,对象,using,资源
From: https://www.cnblogs.com/Dongmy/p/16585871.html

相关文章

  • L6U6-Choosing a gym
    L6U6Choosingagym2022.08.14Sunday15:40-16:30thisclassstarted?==>Isthislessonstarted?Howmanygradesofyourcollege?Freshmansophomoreyearjun......
  • buuctf
    注意,strcat拼接时,是以小端序方式拼接的,0x……LL中的LL指的是longlong类型,从右到左读字符。frombinasciiimporta2b_heximportgmpy2t1='4E44434C53'key='ADSFK'+......
  • SP1557 GSS2 - Can you answer these queries II(离线 线段树)
    SP1557GSS2-CanyouanswerthesequeriesII\(\bigstar\texttt{Hint}\):遇到去重的问题,我们通常考虑离线询问后处理。可以枚举右端点,将询问存储在右端点,考虑用数据结......
  • CF856D Masha and Cactus(树上 DP+抵消贡献技巧)
    CF856DMashaandCactus我们先捞出一个根节点,那么一次旋变就是对路径上点的覆盖。设\(dp_{i,0}\)表示\(i\)没有选择时子树内最大收益,\(dp_{i,1}\)表示\(i\)选择......
  • leetcode(14)矩阵搜索系列题目
    64.最小路径和动态规划classSolution:defminPathSum(self,grid:List[List[int]])->int:m,n=len(grid),len(grid[0])res=0......
  • 极狐gitlab runner 使用 cache 实例
    极狐gitlabrunner使用cache实例参考官方文档:DockerMachineExecutorautoscaleconfiguration|GitLabCachinginGitLabCI/CD|GitLabSpeedupjobexecutio......
  • Docker 常用命令
    基本命令安装Centoscd/etc/yum.repos.dwgethttps://download.docker.com/linux/centos/docker-ce.repoyuminstalldocker-ce-y如果安装过程中报错:packagedock......
  • [atAGC025E]Walking on a Tree
    设第$i$条边被$c_{i}$条路径覆盖,显然答案上界为$\sum\min(c_{i},2)$事实上,上界可以被取到,考虑以下构造——取树上的一个叶子,假设其到父亲的边为$i$,对其分类讨论:1.若$c_{......
  • [AcWing 4507] 子数组异或和
    异或的性质点击查看代码#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constintN=1e6+10;intn;inta[N];voidsolve(){......
  • canvas的drawImage方法参数详解
    HTML5中引入新的元素canvas,其drawImage方法允许在canvas中插入其他图像(img和canvas元素)。drawImage函数有三种函数原型:第一个参数image可以用HTMLImageElement,H......