关于c#中的析构问题,大家一起探讨一下

来源:百度知道 编辑:UC知道 时间:2024/06/06 06:45:41
下面这个程序有问题:先看看,谁有更好的能理解析构的方法可以谈谈,有分加 ,说的越详细越好:
using System;
public class MyResource:IDisposable//实现释放模式的类
{
private bool disposed=false;
public void Dispose()
{
Dispose(true);
}
public void Close()
{
}
~MyResource()
{
}
private void Dispose(bool disposing)
{
if(!this.disposed)
{
if(disposing)
{
Console.WriteLine("调用所引用的对象的Dispose()方法");
}
Cosole.WriteLine("释放类本身所使用的非托管资源");
}
if(disposing)
{
GC.SuppressFinalize(this);
}
}
}
public class Test
{
static void Main()
{
MyResource mr=new MyResource();
try{
Console.WriteLineI("调用mr做一些事情");
}
finally
{
mr.Dispose();
}
}
}

//关于c#中的析构
上面的程序里有个逻辑错误不知道大家看出来没有, 谁看出来了分就给谁啊,说的明白点啊。呵呵,我是初学地

给我信息我给你讲

if(disposing)
{
Console.WriteLine("调用所引用的对象的Dispose()方法");
}
Cosole.WriteLine("释放类本身所使用的非托管资源");
}
if(disposing)
{
GC.SuppressFinalize(this);
}

两个一样的if语句?这样简单的错误。

这里估计没人会你的问题了
建议去百度c 语言吧里问问
都是牛人啊!!
到时候只要报上我的名字就可以了!!

不对。C# 里面的 Dispose 函数可能会被对此调用,所以内置了一个 disposed 变量(初值 false),指示是否已经 dispose。然而你的 GC.SuppressFinalize(this); 没有在 disposed 代码段里面,所以出现问题。正确的方式如下:

if(!this.disposed)
{
if(disposing)
{
Console.WriteLine("调用所引用的对象的Dispose()方法");
GC.SuppressFinalize(this);
}
Cosole.WriteLine("释放类本身所使用的非托管资源");
}

硬是拆开来也行

if(!this.disposed)
{
if(disposing)
{
Console.WriteLine("调用所引用的对象的Dispose()方法");
}
Cosole.WriteLine("释放类本身所使用的非托管资源");
}
if(!this.disposed)
{
if(disposing)
{
GC.SuppressFina