あなたがconstの値を変更した場合、あなたは正しい解決策ではありませんすべてのクライアント
を再構築する必要があります。 constの値を変更した場合、定数ではありませんでした。定数は定義によるものです値を決して変更しないもの。あなたがの値をのの定数をに変更するということは、論理的に不可能な何かをしていることを意味します。あなたがしないと言ったことをやっている。あなたがコンパイラに横たわっていて、それをするときに痛いなら、はコンパイラに横たわっていません。
金の価格は一定ではありません。あなたの銀行の名前は定数ではありません。あなたのプログラムのバージョン番号は定数ではありません。これらは変化するので、は定数にしません。定数は、piのようなもの、または金の原子中のプロトンの数です。
変数はがに変わるものです。そのため、変数は「変数」と呼ばれています。定数は一定のものです...定数です。それが変わる場合は、それを変数にします。定数の場合は定数にします。それはそれと同じくらい簡単です。
なぜですか?静的読み取りと静的読み取りの両方が静的です。
確かです。それはそれと何が関係していますか? C#の "静的"は、 "指定された要素が型の特定のインスタンスではなく型に関連付けられていることを意味します。"
名前が型またはインスタンスに関連付けられているかどうかは、その名前がを参照しているかどうかの問題とは関係ありません(静的な用語は用語の貧しい選択です。定数または変数。
実際に値は両方とも静的読み取り専用vsconstに保存されていますか?
あなたが一定の値を使用する場合、それが使用されている場所、値は「焼き」されます。それは決してを変更するつもりはないので、安全なです。それは定数であるので決してを変更するつもりはなく、それは "定数"の意味です。
変数を使用すると、毎回実行時に変数の値が参照されます。 "readonly"は "この変数はクラスコンストラクタまたはフィールド初期化子でのみ変更できます"という意味です。それはまだ変数です。 (*)
フィールドを静的に読み取り専用にする方法 - 実際にこの問題をシーンの後ろで解決する方法はありますか?
あなたは問題が何であるかを明記していないので、解決しようとしている問題はわかりません。変更可能な値型の読み取り専用フィールドが変異することができないように、そしてあなたが読み取り専用にref
を取ることができないように(*)読み取り専用フィールドは、コンストラクタ外非定数値であると考えられて
フィールドに入力し、参照を変更します。
これは、別のアセンブリからの変数を参照する代わりに、コンパイラが定数の値を "インライン"にするためです。 – ken2k
アセンブリ間のconstのこの動作を知りませんでした。 良い質問 –