[ComVisible(true)]
public interface IDisposable
{ // Methods
void Dispose();
}
public class TestClass :IDisposable
{
public void DoSomething()
{
Console.WriteLine("Do some thing....");
}
public void Dispose()
{
Console.WriteLine("及时释放资源");
}
}
using (TestClass testClass = new TestClass())
{
testClass.DoSomething();
}
TestClass testClass = new TestClass();
try {
testClass.DoSomething();
}
finally
{
IDisposable disposable = testClass as IDisposable;
if (disposable != null)
disposable.Dispose();
}
protected override void Finalize()
{
Console.WritleLine("析构函数执行...");
}
protected override void Finalize()
{
try {
Console.WritleLine("析构函数执行...");
}
finally {
base.Finalize();
}
}
public class TestClass: IDisposable
{
~TestClass()
{
Dispose();
}
public void Dispose()
{ // 清理资源
}
}
private bool _isDisposed = false;
public void Dispose()
{
Dispose(true);
GC.SupressFinalize(this);
}
protected void Dispose(bool Diposing)
{
if(!_isDisposed)
{
if(Disposing)
{
//清理托管资源
}
//清理非托管资源
}
_isDisposed=true;
}
~TestClass()
{
Dispose(false);
}
public class BaseResource : IDisposable
{
// 非托管资源
private IntPtr _handle;
//托管资源
private Component _components;
// Dispose是否被调用
private bool _disposed = false;
public BaseResource() { }
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!this._disposed)
{
if (disposing)
{
// 释放托管资源
_components.Dispose();
}
// 释放非托管资源,如果disposing为false, 只有非托管资源被释放
CloseHandle(_handle);
_handle = IntPtr.Zero;
// 注意这里不是线程安全的
}
_disposed = true;
}
// 析构函数只会在我们没有直接调用Dispose方法的时候调用
// 派生类中不用在次提供析构函数
~BaseResource() { Dispose(false); }
// 如果你已经调用了Dispose方法后再调用其他方法会抛出ObjectDisposedException
public void DoSomething()
{
if (this._disposed)
{
throw new ObjectDisposedException();
}
}
}
public class MyResourceWrapper : BaseResource
{
// 托管资源
private ManagedResource _addedManaged;
// 非托管资源
private NativeResource _addedNative;
private bool _disposed = false;
public MyResourceWrapper() { }
protected override void Dispose(bool disposing)
{
if (!this._disposed)
{
try
{
if (disposing)
{
_addedManaged.Dispose();
}
CloseHandle(_addedNative);
this._disposed = true;
}
finally
{
base.Dispose(disposing);
}
}
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有