Csharp/CSharp Tutorial/Class/IDisposable
Complex IDisposable pattern
<source lang="csharp">using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Text; using System.Security.Cryptography; class MyClass : IDisposable {
private IntPtr myHandle = IntPtr.Zero; ~MyClass() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected void Dispose(bool disposing) { IntPtr h = myHandle; if (h != IntPtr.Zero) { h = IntPtr.Zero; } }
} public class MainClass {
public static void Main() { using (MyClass mc = new MyClass()) { } }
}</source>
implementation of IDisposable
<source lang="csharp">using System; class MyClass: IDisposable {
private bool Disposed = false; public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool disposing) { if(!this.Disposed) { if(disposing) { //free any managed resources } //free unmanaged resources } Disposed = true; } ~MyClass() { Dispose(false); }
}</source>
Simple IDisposable pattern
<source lang="csharp">using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Text; using System.Security.Cryptography; class MyClass : IDisposable {
private Stream myStream = null; public void Dispose() { Stream s = myStream; if (s != null) ((IDisposable)s).Dispose(); }
} public class MainClass {
public static void Main() { using (MyClass mc = new MyClass()) { } }
}</source>