sjgrey
asked on
Single instance of a class to be available to all instances or all other classes
I am developing some class modules to run a specialised simulation and need a simulation clock to be available to the objects in the simulation.
I have a clock class that returns the time as a property, see below.
How can I make the one clock available to all other objects?
I have a clock class that returns the time as a property, see below.
How can I make the one clock available to all other objects?
Private piTime As Integer
Private Sub Class_Initialize()
piTime = 0
End Sub
Public Property Get Time() As Integer
Time = piTime
End Property
Public Sub Tick()
piTime = piTime + 1
End Sub
Public Sub Clear()
piTime = 0
End Sub
You would need all your other classes to have a property (say 'Clock') to which you assign the clock instance when you create each instance of the other classes.
ASKER
I have a Class_Initialize subroutine within the modules that use the clock but I don't see, to be able to pass it parameters. Will I have to use a separate "Let" procedure with a separate line such as
followed by, within the object
to establish the connection to the clock or is there an easier way to include it when instantiating the modules that need the clock?
Object.Clock = SimClock
followed by, within the object
Public Property Let Clock(SimClock as clsSimClock)
Set Clock = SimClock
End Propertyto establish the connection to the clock or is there an easier way to include it when instantiating the modules that need the clock?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
That worked thanks. Code in the class required to use the clock as follows in case it is of interest to anyone else.
And in the code that sets up the class instances
Private pClock As clsSimClock
...
Public Property Set SimClock(Clock As clsSimClock)
Set pClock = Clock
End Property
And in the code that sets up the class instances
Dim SimClock As clsSimClock
...
Set Unit.SimClock = SimClock