delegate-id MessageHandler (str as string).
end delegate.
class-id DelegatesEvents.
01 MessageArrived     event type MessageHandler static.
method-id Main static.
  *> explicit delegate construction
  invoke new MessageHandler(MyHandler)
  *> implicit delegate construction
  declare handler as type MessageHandler = method MyHandler
  *> subscribe to an event
  attach method MyHandler to MessageArrived
  *> raise the event
  invoke MessageArrived("Test message")
  *> unsubscribe from the event
  detach method MyHandler from MessageArrived
  *> Throws a null reference exception as there are no subscribers
  invoke MessageArrived("Test message 2")
  *> Safely raising an #event
  declare handler2 as type MessageHandler = MessageArrived
  if handler2 not equals null
     invoke handler1("Safe message")
  end-if
end method.
method-id MyHandler static (str as string).
  display str
end method.
end class.
 
				   | 
 
				   
					 // Java has no concept of delegates or events.
// Similar behavior is typically achieved by using
// anonymous inner classes instead.
 
 
				   |