3 回答
TA贡献2041条经验 获得超4个赞
这是我最近使用的一个小技巧,可以带来很好的效果。我想与那些经常与VBA战斗的人分享。
1.-在您的每个自定义类中实现一个公共启动子例程。我在所有课程中都将其称为InitiateProperties。该方法必须接受您想发送给构造函数的参数。
2.-创建一个名为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指出的那样,可以通过避免在构造函数中创建局部变量来使用terser语法执行相同的操作。例如,CreateEmployee函数可以这样编写:
Public Function CreateEmployee(name as String, age as Integer) as Employee
Set CreateEmployee = new Employee
CreateEmployee.InitiateProperties name:=name, age:=age
End Function
哪个更好
添加回答
举报