コンストラクタ

VB6ではご存知のとおり、C#VB.NETC++などあるパラメータを渡すコンストラクタがありません。
そんなわけで、Set(Let) Property でクラスのフィールドに指定していたのですが、調べてたらこんな感じでエミュレートする方法もあるみたいです。
まさに、「Code Complete」でいう言語の「中へ」のプログラミングってやつですね。


・Form1.frm

Option Explicit

Private Sub Form_Load()

    Dim person1 As Person
    Set person1 = Create(New Person, "kazupon", 28)
    
    Call person1.DoWork
    Debug.Print "Name : " & person1.Name
    Debug.Print "Age  : " & person1.Age

End Sub

・modObjectManager.bas

Option Explicit

Public Function Create(ByRef ctorImplObj As IConstructable, ParamArray args() As Variant) As IConstructable
    Set Create = ctorImplObj.Constructor(args)
End Function

・IConstructable.cls

Option Explicit

' コンストラクタをエミュレートするインターフェイス

' 概要:コンストラクタメソッド
' パラメーター:
'   arg : パラメータ(配列)
Public Function Constructor(ByVal arg As Variant) As Variant
End Function

・Person.cls

Option Explicit
' Parsonクラス

Implements IConstructable

Private m_name As String ' 名前
Private m_age As Long ' 年齢

' コンストラクタを実装
Private Function IConstructable_Constructor(ByVal arg As Variant) As Variant
    Set IConstructable_Constructor = Me
    m_name = arg(LBound(arg))
    m_age = arg(LBound(arg) + 1)
End Function


' 名前を取得するプロパティ
Public Property Get Name() As String
    Name = m_name
End Property

' 年齢を取得するプロパティ
Public Property Get Age() As Long
    Age = m_age
End Property

' 仕事をするメソッド
Public Function DoWork() As Boolean
    Debug.Print m_name & " work !!"
End Function