C/C++経験はあって、XNAのためにC#を勉強中です。
メモリの開放がいまいちよくわからないので教えてください。

class Foo; があったとして、
public Foo hogehoge;
と書けば、Foo型のポインタができますよね。

そこで、実体を作るために、newします。
hogehoge = new Foo();
hogehogeにメモリが割り当てられます。

このとき、割り当てられたメモリを破棄し、新しくメモリを確保したいとします。
その場合、
・hogehoge = new Foo();
を行えば、元々hogehogeが持ってたメモリの参照回数がゼロになり、開放扱いになるのでしょうか?
もしくは、
if ( hogehoge != null ) hogehoge.Dispose();
みたいな処理がいるのでしょうか?

お願い致します。