コンストラクタ
VB6ではご存知のとおり、C#、VB.NET、C++などあるパラメータを渡すコンストラクタがありません。
そんなわけで、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