の改善版ですわ♪
変更ポイント
- プロパティのコメントから
を削除した。 - ディクショナリを生成するのは 1 つの関数にまとめ、抽象度を上げた。
- 以前は定数ディクショナリの種類ごとに生成関数を定義していたのが、修正後は定義ディクショナリがいくつあっても 1 つのディクショナリ生成関数を使用するだけでよくなった。
- 修正前のディクショナリ生成関数の流れ
- コンストラクタからディクショナリ生成関数を呼ぶ。
- ディクショナリ生成関数内で定数要素をディクショナリに追加していく。
- ディクショナリ生成関数内でディクショナリをプロパティに代入する。
- 修正後のディクショナリ生成関数の流れ
- コンストラクタで定数を配列で定義する。
- それをディクショナリ生成関数に渡す。
- 返り値をプロパティに代入する。
VBA コード
''' <summary> ''' 定数クラス。 ''' 配列などモジュールで定義できない定数を扱う。 ''' </summary> Option Explicit Private mobjLevels As Object Private mobjMartialArtsTypes As Object ''' <summary> ''' レベルのディクショナリ。キーのみ有り、値は無し。 ''' </summary> Public Property Get LEVELS() As Object Set LEVELS = mobjLevels End Property ''' <summary> ''' 武術のディクショナリ。キーのみ有り、値は無し。 ''' </summary> Public Property Get MartialArtsTypes() As Object Set MartialArtsTypes = mobjMartialArtsTypes End Property ''' <summary> ''' コンストラクタ ''' </summary> Private Sub Class_Initialize() ' プロパティ設定 ' レベル Dim varLevel As Variant: varLevel = Array("入門者", "初心者", "中級者", "上級者", "達人") Set mobjLevels = makeDictionary(varLevel) ' 武術 Dim varMartialArtsType As Variant: varMartialArtsType = Array("空手", "柔道", "剣道", "忍術") Set mobjMartialArtsTypes = makeDictionary(varMartialArtsType) End Sub ''' <summary> ''' 引数の配列からキーのみのディクショナリを生成して返します。 ''' </summary> ''' <param name="varArray">ディクショナリに格納する Variant 型の配列</param> ''' <returns>キーのみ有り、値は無しのディクショナリ</returns> Private Function makeDictionary(ByVal varArray As Variant) As Object Set makeDictionary = CreateObject("Scripting.Dictionary") Dim v As Variant For Each v In varArray Call makeDictionary.Add(Key:=v, Item:=Null) Next v End Function
Option Explicit Public Sub Test() Dim udtCst As CstC: Set udtCst = New CstC ' 定数クラスのディクショナリ定数のテスト ' レベル If udtCst.LEVELS.Exists("達人") Then Debug.Print "達人あり!" Else Debug.Print "達人なし><" End If If udtCst.LEVELS.Exists("黒帯") Then Debug.Print "黒帯あり!" Else Debug.Print "黒帯なし><" End If ' 武術 If udtCst.MartialArtsTypes.Exists("セパタクロー") Then Debug.Print "セパタクローあり!" Else Debug.Print "セパタクローなし><" End If If udtCst.MartialArtsTypes.Exists("忍術") Then Debug.Print "忍術あり!" Else Debug.Print "忍術なし><" End If End Sub
結果
達人あり! 黒帯なし>< セパタクローなし>< 忍術あり!
おわりに
次のページが参考になりました。ありがとう存じます!
- ドキュメントコメントにより型の概要をXMLファイルに出力する: .NET Tips: C#, VB.NET
プロパティのコメント形式の書き方について参考にいたしました。
以上です。