メンバー手続きが、書き込み禁止である、と指定します。
構文:
記述:
メソッドが、それが呼ばれるオブジェクトを変更しないことを明示します。
隠された
This パラメーターは、読み取り専用となります。
宣言は、「const メソッドの起動は、オブジェクトを変更しないと約束します。」と読むことができます。
そして、コンパイラーは、メンバー手続きが、データ項目のいずれかを変更しようとするか、非 const メンバー手続きを呼ぶ場合、エラーとなります。
読み出し専用 (
Const) 宣言は、「変更しない約束」と解釈できる、型安全の指標です。
コンパイラーは、const宣言を、変数とパラメーターに対する操作をチェックし、それらのデータが変えられる可能性がある場合、コンパイル時にエラーを発生させるために、使います。
Const 修飾語を使うための実行時オーバーヘッドはありません。全てのチェックが、コンパイル時に、なされるからです。
構築子と破壊子は、
Const にはなりえません。(使えない)
メンバー手続きは、
Const と
Static の両方にはなりえません。静的メンバー手続きには、隠れた
This パラメータがないからです。
宣言に、
Const を持つメソッドは、
Const を対応するメソッド本体で指定することもできます。コードを読みやすく改善できます。
例:
'' Constメンバー手続き
Type foo
x As Integer
c As Const Integer = 0
Declare Const Sub Inspect1()
Declare Const Sub Inspect2()
Declare Sub Mutate1()
Declare Sub Mutate2()
End Type
''
Sub foo.Mutate1()
'' 非 const データ項目を変えることができます
x = 1
'' しかし、まだ const データ項目を変えることができません
'' const データ項目は、変化しないと約束されます
'' c = 1 '' コンパイル・エラーになります。
End Sub
''
Sub foo.Mutate2()
'' const メンバーを呼ぶことができます
Inspect1()
'' そして、非 const メンバーも
Mutate1()
End Sub
''
Sub foo.Inspect1()
'' データメンバーを使用できます
Dim y As Integer
y = c + x
'' しかし、それらを変えることはできません。
'' なぜなら、Inspect1() は、const で、foo を変えないと約束するからです。
'' x = 10 '' コンパイル・エラーになります。
End Sub
''
Sub foo.Inspect2()
'' const メンバーを呼ぶことができます
Inspect1()
'' しかし、非 const メンバーではない Mutate1() は、
'' コンパイル・エラーになります。
End Sub
QBからの違い:
参照: