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);
}
}
}