の改善版ですわ♪
変更ポイント
- プロパティのコメントから
を削除した。 - ディクショナリを生成するのは 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
プロパティのコメント形式の書き方について参考にいたしました。
以上です。
