为了账号安全,请及时绑定邮箱和手机立即绑定

将参数传递给VBA中的Constructor

将参数传递给VBA中的Constructor

泛舟湖上清波郎朗 2019-12-10 10:55:18
如何构造将参数直接传递到自己的类的对象?像这样:Dim this_employee as EmployeeSet this_employee = new Employee(name:="Johnny", age:=69)无法做到这一点非常烦人,最终您会得到肮脏的解决方案。
查看完整描述

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

哪个更好


查看完整回答
反对 回复 2019-12-10
  • 3 回答
  • 0 关注
  • 413 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信