The garbage collector is the only mechanism that can destroy a managed object, but you usually don't invoke it explicitly. You just let it do its thing.
Just like you never take your own trash to the depot, you just leave it sitting on the corner. It's always the garbage man's responsibility.
You can release references to things and clean them up with IDisposable, finalizers and destructors but not destroy them.
By using System.GC you can ask the garbage man to do things early - request a custom run just for yourself - but this usually screws up his schedule and he has a lot more trash to deal with than just yours so it's not recommended.