[解決済み] VBAでコンストラクタに引数を渡す
質問
自分のクラスに直接引数を渡すオブジェクトを作るにはどうしたらよいでしょうか?
このようなものです。
Dim this_employee as Employee
Set this_employee = new Employee(name:="Johnny", age:=69)
これができないのは非常に迷惑なことで、これを回避するために汚い解決策を取ることになります。
どのように解決するのですか?
私が最近使っている、良い結果をもたらすちょっとしたトリックを紹介します。VBAとよく格闘している人たちに教えてあげたい。
1.- 各カスタムクラスでパブリックな開始サブルーチンを実装してください。私は、すべてのクラスを通してInitiatePropertiesと呼んでいます。このメソッドは、あなたがコンストラクタに送りたい引数を受け入れなければなりません。
2.- factoryというモジュールを作成し、quot;Create"という単語とクラスと同じ名前、そしてコンストラクタが必要とするのと同じ入力引数を持つパブリック関数を作成します。この関数はクラスをインスタンス化し、(1)で説明した開始サブルーチンを、受け取った引数を渡して呼び出す必要があります。最後に、インスタンス化され、開始されたメソッドを返します。
例です。
カスタムクラスEmployeeがあるとします。前の例と同じように、名前と年齢を指定してインスタンス化する必要があります。
m_nameとm_ageは設定されるプライベートプロパティです。
Public Sub InitiateProperties(name as String, age as Integer)
m_name = name
m_age = age
End Sub
そして今度はファクトリーモジュールで
Public Function CreateEmployee(name as String, age as Integer) as Employee
Dim employee_obj As Employee
Set employee_obj = new Employee
employee_obj.InitiateProperties name:=name, age:=age
set CreateEmployee = employee_obj
End Function
そして最後に従業員をインスタンス化する場合
Dim this_employee as Employee
Set this_employee = factory.CreateEmployee(name:="Johnny", age:=89)
特に、複数のクラスがある場合に便利です。モジュールファクトリにそれぞれの関数を置き、インスタンスの作成は factory.CreateClassA(引数) , factory.CreateClassB(other_arguments)です。 などです。
EDIT
stenciが指摘したように、コンストラクタ関数でローカル変数を作成しないようにすれば、より短い構文で同じことを行うことができます。たとえば、CreateEmployee関数はこのように書くことができます。
Public Function CreateEmployee(name as String, age as Integer) as Employee
Set CreateEmployee = new Employee
CreateEmployee.InitiateProperties name:=name, age:=age
End Function
どっちが素敵かな。
関連
-
[解決済み] C++で、あるコンストラクタを別のコンストラクタから呼び出す(コンストラクタ・チェイニングを行う)ことは可能ですか?
-
ADODBを使用したExcel VBAで、小計を使用してデータベースにアクセスする
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] C#でベースコンストラクタを呼び出す
-
[解決済み] コンストラクタ内の仮想メンバー呼び出し
-
[解決済み] あるコンストラクタを別のコンストラクタから呼び出す
-
[解決済み] ベースクラスのコンストラクタを呼び出す際のルールは?
-
[解決済み] 抽象クラスはコンストラクタを持つことができますか?
-
[解決済み] コンストラクタのシグネチャを定義するインターフェース?
-
[解決済み] Excel VBAで整数を文字列に変換するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
vlookup関数の使用でExcelのvba
-
ADODBを使用したExcel VBAで、小計を使用してデータベースにアクセスする
-
名前の秘密:Excelの隠された名前空間
-
[解決済み] VBAで変数の宣言と代入を同時に行うことはできますか?
-
[解決済み] Excel VBAで整数を文字列に変換するにはどうすればよいですか?
-
[解決済み] VBAでSetというキーワードは実際に何をするのですか?[重複しています]
-
[解決済み] Microsoft Office VBAの編集時に、ポップアップの「コンパイルエラー」メッセージを無効にするにはどうすればよいですか?
-
[解決済み] VBA - 条件付きで for ループの反復をスキップする方法
-
[解決済み] VBAのハッシュテーブル/連想配列