Dim mgr As Manager
mgr.Initialize
Log("CallMethod on empty list")
mgr.CallMethod("Test", Null)
Log("Adding a Null object to list")
mgr.Add(Null)
Log("Calling a method on Null object")
mgr.CallMethod("Test", Null)
Log("Removing Null object from list")
mgr.Remove(Null)
Dim cls As Class1
cls.Initialize
mgr.Add(cls)
Log("Calling NON-existing class1 object method")
mgr.CallMethod("Test", Null)
Log("Adding same class1 object")
mgr.Add(cls)
Log("Removing class1 object")
mgr.Remove(cls)
Log("Removing class1 object again")
mgr.Remove(cls)
Dim cls2 As Class2
Log("Adding uninitialized class2 object")
mgr.Add(cls2)
Log("Calling existing class2 object method against uninitialized class2 object")
mgr.CallMethod("Test", Null)
Log("Initializing class2 object")
cls2.Initialize
Log("Calling existing class2 object method")
mgr.CallMethod("Test", Null)
Log("Removing class2 object")
mgr.Remove(cls2)
Log("Notice that class2 object method is called AFTER class2 object has been removed.")
Log("In this particular case, welcome to event driven programming (the event queue is processed AFTER class removal)")