Vba 创建作为参数传递的类的副本
我正在VBA中创建一个项目来自动处理异步准多线程(非常抱歉)。这围绕着创建和运行一个类的多个副本而展开,该类Vba 创建作为参数传递的类的副本,vba,excel,class,Vba,Excel,Class,我正在VBA中创建一个项目来自动处理异步准多线程(非常抱歉)。这围绕着创建和运行一个类的多个副本而展开,该类实现了某个接口,并在异步任务完成时引发一些已知事件。接口类似于 我的程序调用该类来执行其代码,并侦听所引发的事件,一切正常。现在,我的最后一个任务是获取任何实现了相应接口的给定类,并制作多个副本以使set并行运行 如何复制传递给例程的类 我如何获取一个类引用并制作多个新版本 或者在代码中,我的每个线程类(处理传递的异步类的类)都有一个Worker属性来保存它们的任务 Private wor
实现了某个接口,并在异步任务完成时引发一些已知事件。接口类似于
我的程序调用该类来执行其代码,并侦听所引发的事件,一切正常。现在,我的最后一个任务是获取任何实现了相应接口的给定类,并制作多个副本以使set并行运行
如何复制传递给例程的类
我如何获取一个类引用并制作多个新版本
或者在代码中,我的每个线程类(处理传递的异步类的类)都有一个Worker
属性来保存它们的任务
Private workerObject As IWorker
Public Property Set Worker(workObj As IWorker) 'pass unknown class with IWorker interface
'What goes here?
Set workerObject = workObj
'This won't work as then every thread points to the same worker
'I want something to create a New one, like
Set workerObject = New ClassOf(workObj)
'But of course that doesn't work
End Property
您需要检查可能的类型并采取相应的行动:
Dim workerObject As IWorker
If TypeOf workObj Is ImplementingClass1 Then
Set workerObject = New ImplementingClass1
ElseIf TypeOf workObj Is ImplementingClass2 Then
Set workerObject = New ImplementingClass2
End If
或者,您可以将factory方法添加到接口:
Public Function CreateNew() As IWorker: End Function
在类中实现它:
Public Function IWorker_CreateNew() As IWorker
Set IWorker_CreateNew = New ImplementingClass1
End Function
然后:
Set workerObject = workObj.IWorker_CreateNew()
如果要克隆实例,则需要手动执行,即添加一个.clone()方法,该方法创建一个新实例,然后将其自身的内部状态分配给该实例,然后返回该实例。@AlexK。这并不理想,因为我必须确保我的IWorker
接口规定了.Clone()
函数,该函数在我将要传递的类中似乎是任意的和错误的。我也不一定想要克隆,如果可以的话,我想要一个新实例。您可以将函数(f.eks.Create
)作为实现类的一部分(将其Predeclared ID
设置为true),并让它创建一个新的干净实例。然后可以将Dim W声明为IWorker
,Set W=New IWorker
,Set W=Worker.Create
(其中Worker
是实现类)。看看更好的解释。我想知道我是否可以通过byVal
,它似乎不起作用,但这可能是一个实现错误-有人知道这在理论上是否应该起作用吗?或者为什么不应该?