I am not pretty sure but from what I have understand, if you are only using managed objects (no references to unmanaged resources like File, Font, Database, etc. handles) eventually .NET Garbage Collector will release it. This is where .NET's memory management comes handy over C++/COM where you should explicitly release your objects using reference counting. My answers to your questions are:
1) Yes, if the objects you have referenced from your class implement IDisposable you should call Dispose(), otherwise you can make them null and GC will do the rest.
2) Calling GC.suppressFinalize(this) doesn't mean it will not be collected by GC. It means that there is no need to run finalizor on this object because the unmanaged resources have already been collected by calling Dispose() explicitly. This is a perf enhnacement to your class.