Javaでは、final
は、変数を1回だけ割り当てることができますが、その割り当てはプログラム内のどこでも実行できます。 C#では、readonly
は、コンストラクタでのみフィールドを割り当てることができることを意味します。このIMOは、あまり有用ではありません。C#readonly vs Java final
C#はJavaの設計の影響を強く受けましたが、この違いは常に私を非常に奇妙に思っています。誰もがの技術的な理由がCLRにあると、C#が役に立たない振る舞いをしているかどうかを知ることができますか?readonly
対Javaのfinal
?
編集:
コメントに応じて;私は不変性の恩恵をよく知っていることを指摘したいと思います。私はそれを全面的に使います。
public class Foo
{
private readonly int _bar;
Foo()
{
_bar = 5;
}
}
おっと、私は実際にヘルパーメソッドでその値を初期化する必要があります:私はreadonly
は、このためのJavaよりもあまり有用であると考えています!
public class Foo
{
private readonly int _bar;
Foo()
{
initialize()
}
private void initialize()
{
_bar = 5; //Can't compile because of semantics of readonly
}
}
あなたの「あまり役に立たない」は私の「より安全」です。 – Oded
不変性のメリットは何ですか?私は 'readonly'がコンパイラにとって非常に有用であることがわかると思います。あなたは本質的に主観的です。 – Jodrell
Javaのプログラムのどこでも最終的な変数に値を渡すことはできません。静的な最終定数を作成する場合は、変数を最終的に作成してからコンストラクタで変数を初期化できる場合は、その場で値を与える必要があります。 – ankurtr