ASP.NET----析构方法

using System;
using System.Collections.Generic;
using System.Text;

namespace NET.MST.Third.FinalizeDispose
{
public class FinalizeDisposeBase : IDisposable
{
// 标记对象是否已被释放
private bool _disposed = false;

// Finalize方法:
~FinalizeDisposeBase()
{
Dispose(
false);
}

// 这里实现了IDispose中的 Dispose方法
public void Dispose()
{
Dispose(
true);

//告诉GC此对象的Finalize方法不再需要调用
GC.SuppressFinalize(true);
}

//在这里做实际的析构工作
//申明为虚方法以供子类在有必要时重写
protected virtual void Dispose(bool isDisposing)
{
// 当对象已经被析构时,不再执行
if (_disposed)
return;
if (isDisposing)
{
//在这里释放托管资源
//只在用户调用Dispose方法时执行
}
//在这里释放非托管资源

//标记对象已被释放
_disposed = true;
}
}

public sealed class FinalizeDispose : FinalizeDisposeBase
{
private bool _mydisposed = false;

protected override void Dispose(bool isDisposing)
{
// Don't dispose more than once.
if (_mydisposed)
return;
if (isDisposing)
{
//在这里释放托管的并且在这个类型中申明的资源
}
//在这里释放非托管的并且在这个类型中申明的资源

//调用父类的Dispose方法来释放父类中的资源
base.Dispose(isDisposing);

// 设置子类的标记
_mydisposed = true;
}

static void Main()
{
}
}
}

作者: brainmao   发布时间: 2011-06-13