IDisposable interface force implementation of dispose method for any class, Let's see IDisposable interface example in C#
Here you learn how to implement IDisposable in C#, but before that you must realize that why do you need to implement IDisposable interface.
IDisposable provides a mechanism for releasing unmanaged resources in .Net
Just assume that you have a class called StudentDTO in your data access layer,
now whenever you need to access student data in your presentation layer or controller,
you need to create a new instance of StudentDTO class, right ?
Probably you will do this way
StudentDTO _dto=new StudentDTO(); // now here you call all students methods to complete your work.
What if you forget to set the new instance to null _dto=null; (after doing your work)! so the memory on heap will not be released, right ?
Now after implementing IDisposable in any class that can be done automatically, see the example.
Here you learn how to dispose c# class object using Dispose method of IDisposable Interface
public class StudentDTO:IDisposable
{
// Dispose() calls Dispose(true)
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
Take a look at the complete implementation of IDisposable Interface of C# Class
public class StudentDTO:IDisposable
{
#region IDisposable Members
private bool isDisposed = false;
// Dispose() calls Dispose(true)
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
// NOTE: Leave out the finalizer altogether if this class doesn't
// own unmanaged resources itself, but leave the other methods
// exactly as they are.
~StudentDTO()
{
// Finalizer calls Dispose(false)
Dispose(false);
}
// The bulk of the clean-up code is implemented in Dispose(bool)
protected virtual void Dispose(bool disposing)
{
if (isDisposed)
return;
if (disposing)
{
// if any managed resources to be free.
}
isDisposed = true;
}
#endregion
}
Now you can create an instance of class this way, and you don't need to set the dto=null for this code
using (StudentDTO dto = new StudentDTO())
{
DataSet _ds= dto.getStudentDataset();
}
The moment your logic comes out of the curly brace { }, the object will be disposed automatically.