Please correct me if i'm wrong.
As far a i read/understood, all clases of the .NET Framework are managed (to the view of the programmer, although underderlaying they might use unmanaged code), so theoretically you dont need to call Dispose() or using, because the gc will take care. But sometimes it's very recommended to use them, see IDisposable Interface and
Which managed classes in .NET Framework allocate (or use) unmanaged memory? and http://blogs.msdn.com/b/kimhamil/archive/2008/11/05/when-to-call-dispose.aspx
EDIT: (you are right noob) For clarification i'll add Nayan answer from IDisposable Interface
It recommended to call dispose or using, when:
1.You class has many objects and there are of lots of cross references. Even though its all managed, GC may not be able to reclaim
the memory due to alive references. You get a chance (other than
writing a finalizer) to untangle the references and break up the links
the way you attached them. Hence, you are helping the GC to reclaim
the memory.
2.You have some streams open which are alive till the object of the class dies. Even though such implementations of files/network etc are
managed, they go deep down to handles in Win32 mode. Hence, you get a
chance to write a Dispose method where you can close the streams. The
same is true for GDI objects, and some more.
3.You are writing a class which uses unmanaged resources, and you want to ship your assembly to third parties. You better use disposable
pattern to make sure you are able to free the handles to avoid the
leakage.
4.Your class implements lots of event handlers and hooks them up to events. The objects of classes which
expose the events, like Form etc., will not be freed up by GC since
the implementations local to your class (maybe) are still hooked into
those events. You can unhook those event handlers in Dispose; again
helping GC.