変更する可能性がある場合は、ここを使用する必要readonlyがあります。π のように、決してconst変わらないものに使用する必要があります。この理由は、 と の微妙な違いによるものです。constreadonly
主な問題は、 の値を変更した場合、を使用するすべての依存クライアントを再コンパイルconstする必要があることです。そうしないと、ひどい. したがって、変更される可能性のある値については、 を使用せずに を使用してください。constconstreadonly
したがって、値が決して変わらない場合は、 を使用するだけで、 の観点からのconst定義について心配する必要はありません。次のように言ってください。EpsilonROUND
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 行のコードを出力する小型のコード ジェネレーターを作成することもできますが、それに時間を費やすことの価値には疑問を感じます。Epsilonconst