gpt4 book ai didi

vba - 在 VBA 中将参数传递给构造函数

转载 作者:行者123 更新时间:2023-12-03 05:16:41 24 4
gpt4 key购买 nike

如何构造将参数直接传递给您自己的类的对象?

类似这样的事情:

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

无法做到这一点是非常烦人的,你最终会得到肮脏的解决方案来解决这个问题。

最佳答案

这是我最近使用的一个小技巧,效果很好。我想与那些经常与VBA打交道的人分享。

1.- 在每个自定义类中实现公共(public)启动子例程。我在所有类(class)中将其称为 InitiateProperties。此方法必须接受您想要发送给构造函数的参数。

2.- 创建一个名为factory的模块,并创建一个公共(public)函数,其中包含“Create”一词加上与类相同的名称,以及与构造函数需要的相同的传入参数。该函数必须实例化您的类,并调用第 (1) 点中解释的启动子例程,传递接收到的参数。最后返回实例化并启动的方法。

示例:

假设我们有自定义类 Employee。如前面的示例所示,必须使用名称和年龄来实例化。

这是 InitiateProperties 方法。 m_name 和 m_age 是我们要设置的私有(private)属性。

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)

当您有多个类(class)时特别有用。只需在模块工厂中为每个函数放置一个函数,然后通过调用 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

哪个更好。

关于vba - 在 VBA 中将参数传递给构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15224113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com