変更する可能性がある場合は、ここを使用する必要readonly
があります。π のように、決してconst
変わらないものに使用する必要があります。この理由は、 と の微妙な違いによるものです。const
readonly
主な問題は、 の値を変更した場合、を使用するすべての依存クライアントを再コンパイルconst
する必要があることです。そうしないと、ひどい. したがって、変更される可能性のある値については、 を使用せずに を使用してください。const
const
readonly
したがって、値が決して変わらない場合は、 を使用するだけで、 の観点からのconst
定義について心配する必要はありません。次のように言ってください。Epsilon
ROUND
internal const int ROUND = 3;
public const double Epsilon = 1e-3;
もう一方を変更せずに一方を誤って変更しないようにしたい場合は、コンストラクターに小さなチェックを追加できます。
if (Epsilon != Math.Pow(10, -ROUND)) {
throw new YouForgotToChangeBothConstVariablesException();
}
デバッグ リリースでのみコンパイルされるように、条件付きコンパイルを追加することもできます。
変更する場合は、次を使用しますstatic readonly
。
internal readonly int ROUND = 3;
public static readonly double Epsilon = Math.Pow(10, -ROUND);
この制限により、相互に依存する両方の定数を const として定義する方法がわかりません。[...]これを行う方法の明らかな方法がありませんか?
Math.Pow
いいえ、 orを使用して何らかの計算を行う必要があり、とMath.Log
の間を移動ROUND
する必要があります。1 つの入力値に基づいてこれら 2 行のコードを出力する小型のコード ジェネレーターを作成することもできますが、それに時間を費やすことの価値には疑問を感じます。Epsilon
const