Task

Demonstrate how to make the object respond (sensibly/usefully) to an invocation of a method on it that it does not support through its class definitions.

Note that this is not the same as just invoking a defined method whose name is given dynamically; the method named at the point of invocation must not be defined.

This task is intended only for object systems that use a dynamic dispatch mechanism without static checking.



Related task

   Send an unknown method call.


Class DynamicDispatch.Example Extends %RegisteredObject
{
 
Method Foo()
{
	Write "This is foo", !
}
 
Method Bar()
{
	Write "This is bar", !
}
 
Method %DispatchMethod(Method As %String, Args...)
{
	Write "Tried to handle unknown method '"_Method_"'"
	For i=1:1:$Get(Args) {
		Write ", " If i=1 Write "with arguments: "
		Write "'"_Args(i)_"'"
	}
	Write !
}
 
ClassMethod Test()
{
	Set obj=##class(DynamicDispatch.Example).%New()
	Do obj.Foo()
	Do obj.Bar()
	Do obj.Grill()
	Do obj.Ding("Dong", 11)
}
 
}