将参数传递给VBA中的构造函数

你如何构造对象直接传递参数到你自己的类?

这样的东西:

Dim this_employee as Employee
Set this_employee = new Employee(name:="Johnny", age:=69)

无法做到这一点是非常讨厌,你最终得到脏的解决方案来工作这个。

这里有一个小技巧我使用最近和带来好的结果。我想和那些经常与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

这更好。

http://stackoverflow.com/questions/15224113/pass-arguments-to-constructor-in-vba

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:将参数传递给VBA中的构造函数