readonlyとconstの使い分け

(追記)
この記事は未だにgoogle経由でアクセスが多いようなので、結論をまとめておきます。経緯は以下のコメントを含めた本文を読んでいただければ分かるかと思います。
C#で定数を定義したい場合に、constが使える場合は常に使った方がいいです。つまり、対象となる値の型が値型ならばconstを、参照型ならばstatic readonlyを使うことになります。
普段、定数にしたい値はintやstringが多いと思いますので、大体の場合にconstが使えるはずです。
(追記終わり)


この頃、ずっとC#を使っているのですが readonlyと constをどう使い分けるのが良いのかがいまいち分かりません。そもそもJavaと同じ感覚で使おうとすると、Javaの finalとC#の readonlyがちょうど同じような宣言のため、constがあることに気が付きませんでした。
また、あるクラスで定数を定義しようとして

private static ??? int CONST_NUMBER = 1;

等と書きたい時に constが使えません。staticなフィールドには適用できないらしいです。readonlyやこの時にも使えるので、結局 readonlyしか使わないようになってしまいました。
constを使った方が良い or こういう場合はconstしか使えない、と言う状況はあるのでしょうか?MSDNを読むと「const フィールドがコンパイル時定数であるのに対し、readonly フィールドは実行時定数として使用できます。」とありますが、実質的な違いはどのようなものがあるのでしょう?配列の長さなどに const定数を使っておけばコンパイル時に長さが最適化されたりするのかな?
うーん。。。