C#入門者です。

public class Sample
{

  public void Hoge(){} 

  void Fuga(){} 

}

上記のコードのSample.Hoge()Sample.Fuga()の違いはなんでしょうか。
publicやprivateなどがないとき、どのような扱いになるのでしょうか。
また、どのような場合にこういった書き方が必要になるのでしょうか。