標準モジュールでの定数定義はそう難しくない。標準モジュールの上部で、例えば

◆標準モジュール Module1

Public Const C_VAL As Integer = 5



などと書けば、そのプロジェクト内では C_VAL は 5 という定数として使える。



クラスモジュールではどうだろうか?

◆Classモジュール Class1

Public Const C_TAX_RATE As Integer = 5



などと書いて実行してみようものならエラーが出る。

クラスモジュール内でPublicの定数は定義できないのだ。


やり方を紹介する前に、「なんでクラスモジュールで定数なんか定義するの?」と思われるだろう。ごもっとも。

簡単なところでは、定数の種類によってクラスを分けておけば、どういう値を扱っているのか分かりやすい、というメリットがある。例は悪いが「データベース関係の定数」「ネットワークアクセス関連の定数」「固定のユーザーID/パスワードの定数」などと分けられる。

もう少し面白い使い方もできるのだが、っとクラスモジュールに馴染んでからでないと難しい部分があるので、先々出そうと思う。



さて、やり方は二つある。


※現在、記憶に頼って書いています。動作検証していません。


【その1】

◆Classモジュール Class2
Public Function TAX_RATE() As Integer
  TAX_RATE = 5
End Function

とすれば、そのクラスのGetVal を呼び出せば 5 が返る。


【その2】

◆Classモジュール Class3
Private Const C_TAX_RATE As Integer = 5

Public Property Get TAX_RATE() As Integer
  TAX_RATE = C_TAX_RATE
End Function

これでそのクラスの TAX_RATE を呼び出せば 5 が返る。



どちらを使ってもいいのだが、私としては後者で Property Get に馴染んでおいていただくことをお勧めする。

この先、Property Set/Let を紹介するのだが、そのときには必須であるし、何よりも関数内に固定値を入れると、経験上メンテナンス性は下がるようであるからだ。


Property Get はなかなかいい手本がないようである。ここ、難しいようならもう少し噛み砕いて書こうと思う。メールなどで意見をいただけるとありがたい。

※最近、コメントがあると通知されるようになったので、コメントでもいいです。



※書き直し /八月末削除予定 /クラス