final const readonly

値を書き換えるつもりのない変数を宣言することがある。ローカル変数や関数の引数の場合もあれば、メンバ変数の場合もある。
Javaの場合、このような変数を宣言するときにはfinalと書いておくと、コンパイル時にチェックできる*1
C++にもconstという似たものがある。詳しくは触れないけれど、Javafinalより凝った機能を提供している。
さてC#にもきっとJavafinalに相当するものがあるに違いない、そう思ってconstと書いてみたのだが、どうもうまくいかない。
調べてみたところ、C#にはconstのほかにreadonlyがあり、求めていたのはこちらだったようだ。ただし、メンバ変数にしか使えない。
constも値が書き換えられないという点は共通だが、静的に決まる値のみが許されるなど、「定数」としての意味が大きい。

まとめると次のようになる。

final const readonly
Java 変数の書き換え禁止    
C++   変数の書き換え禁止
オブジェクトへのconst操作以外禁止
 
C#   静的な定数 メンバ変数の書き換え禁止

名前から連想する意味にもっとも近いのはC#のものだと思う。ローカル変数にもreadonly使いたいなぁ。

*1:final変数の初期化し忘れ・final変数への代入は、どちらもコンパイルエラーになる。