class MyResourceWrapper:IDisposable
{
~MyResourceWrapper()
{
//Clean up unmanaged resources here
Console.WriteLine("MyResourceWrapper is finalized");
}
public void Dispose()
{
//Clean up unmanaged resources here
Console.WriteLine("MyResourceWrapper is disposed");
}
}
class ClassWithoutAnyting
{
}
static void Main(string[] args)
{
MyResourceWrapper ForFinalizeOnly = new MyResourceWrapper();
ForFinalizeOnly = null;
MyResourceWrapper ForFinalizeAndDispose = new MyResourceWrapper();
ForFinalizeAndDispose.Dispose();
ForFinalizeAndDispose = null;
//If you are bored to type Disposed, you can type "using" instead
using (MyResourceWrapper ForFinalizeAndDispose1 = new MyResourceWrapper()){}
//There is a compile error if you utilizing "using" with object
//without Dispose method implemented
//*** Compile ERROR!
using (ClassWithoutAnyting newclass = new ClassWithoutAnyting()){}
GC.Collect();
GC.WaitForPendingFinalizers();
}