Visual Basicは、変更不可能な値を宣言するための2つの主要な方法—ConstとReadOnlyをサポートしています。Constはコンパイラ定数用で、値はコンパイル時に既に知られている必要があります。ReadOnlyは宣言時またはコンストラクタでのみ初期化を許可し、実行時に不変性を保ちます。
歴史的には、VB6以前からこのようなセマンティクスはマジックナンバーを回避し、メンテナンスを容易にしました。VB.NETでは、インスタンスフィールドやクラスに対してReadOnlyが導入され、機能が拡張されました。
実行時に決定される値や外部データに依存する値にConstを使用すると、エラーが発生する可能性があります。スコープの見間違いもバグにつながります。
コンパイル時に知られている単純な不変値(数値、文字列)にはConstを使用し、コンストラクタで計算される可能性がある値にはReadOnlyを使用してください。
コード例:
Public Class MathConstants Public Const Pi As Double = 3.1415926535 Public ReadOnly Property UtcCreated As DateTime Public Sub New() UtcCreated = DateTime.UtcNow End Sub End Class
主な特徴:
実行時に取得される値にConstを宣言できますか(例えば、ファイルから)?
いいえ—Constはコンパイル時に値を要求します。実行時初期化にはReadOnlyを使用するべきです。
ReadOnlyフィールドはコンストラクタの後に変更できますか?
いいえ—初期化の瞬間(宣言時またはコンストラクタで)のみ変更可能であり、その後は読み取り専用です。
数学的計算に浮動小数点数のConstを使用するべきですか?
はい、値が事前に知られている場合は。ただし、他のアセンブリで使用する場合、Constの値を変更すると、全ての依存モジュールを再コンパイルする必要があります。コンパイラは値を直接埋め込むためです。
開発者が環境(dev/prod)ごとに変更する必要があるフォルダーのパスにConstを宣言しました。そのため、フォルダーを変更する際に、このConstを使用している全てのプロジェクトを再構築する必要がありました。
利点:
欠点:
パスのReadOnlyを実装し、環境設定を考慮してコンストラクタで初期化しました。値は設定を通じて簡単に変更でき、全アプリケーションの再構築は不要です。
利点:
欠点: