using System;
using System.Collections.Generic;
using System.Text;
namespace finalize
{
class Program
{
static void Main(string[] args)
{
MyResource myone = new MyResource();
try
{
//do something
}
finally
{
myone.Dispose();
myone.Close(); //因为已经释放所以不执行动作
myone.Close();
}
using (MyResource mytwo = new MyResource())
{
//do something
}
Console.Read();
}
}
public class MyResource : IDisposable
{
private bool IsDisposed; //判断类是否被释放
public void Dispose()
{
Dispose(true); //调用Dispose(true)释放该类所引用对象的Dispose方法和类本身使用的非托管资源;
}
public void Close()
{
Dispose(true);
}
public void Dispose(bool disposing)
{
if (!this.IsDisposed)
{
if (disposing)
Console.WriteLine("此处释放该类所引用对象的Dispose方法");
Console.WriteLine("此处释放类本身使用的非托管资源");
this.IsDisposed = true;
if (disposing)
GC.SuppressFinalize(this); //阻止终结器的调用
}
}
~MyResource()
{
Dispose(false); //析构函数释放非托管资源调用Dispose(false);
}
}
}
using System.Collections.Generic;
using System.Text;
namespace finalize
{
class Program
{
static void Main(string[] args)
{
MyResource myone = new MyResource();
try
{
//do something
}
finally
{
myone.Dispose();
myone.Close(); //因为已经释放所以不执行动作
myone.Close();
}
using (MyResource mytwo = new MyResource())
{
//do something
}
Console.Read();
}
}
public class MyResource : IDisposable
{
private bool IsDisposed; //判断类是否被释放
public void Dispose()
{
Dispose(true); //调用Dispose(true)释放该类所引用对象的Dispose方法和类本身使用的非托管资源;
}
public void Close()
{
Dispose(true);
}
public void Dispose(bool disposing)
{
if (!this.IsDisposed)
{
if (disposing)
Console.WriteLine("此处释放该类所引用对象的Dispose方法");
Console.WriteLine("此处释放类本身使用的非托管资源");
this.IsDisposed = true;
if (disposing)
GC.SuppressFinalize(this); //阻止终结器的调用
}
}
~MyResource()
{
Dispose(false); //析构函数释放非托管资源调用Dispose(false);
}
}
}