如果有人像我一样通过搜索到达这里,我建议查看
StackOverFlow: 在VBA中传递参数给构造函数中的答案。
这不是我的答案,它来自
Bgusach。我在这里包含它,因为我认为一个有用的答案不仅仅是一个链接。
在VBA中传递参数给构造函数
这是我最近使用的一个小技巧,效果很好。Bgusach想与那些经常与VBA打交道的人分享。
1.- 在每个自定义类中实现一个公共初始化子程序。我在所有类中都称其为InitiateProperties。此方法必须接受您想要发送到构造函数的参数。
创建一个名为“factory”的模块,并创建一个公共函数,函数名称为类的名称加上单词“Create”,输入参数与构造函数相同。此函数必须实例化您的类,并调用初始化子程序(第1点中解释),传递接收到的参数。最后返回已实例化和初始化的方法。
例如:
假设我们有自定义类Employee。与前面的示例一样,它必须使用名称和年龄进行实例化。
这是InitiateProperties方法。 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(arguments)、
factory.CreateClassB(other_arguments) 等来实例化。
编辑
正如 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
这句话的意思是:“哪一个更好。”