import extensions; import system'routines; class Operable { Operable = self; operate() = "delegate implementation"; } class Delegator { object? Delegate : prop; constructor() { Delegate := nil } operate() { // if the object does not support "Operable" message - returns nil var operable := Delegate?.Operable \ back(nil); if (nil == operable) { ^ "default implementation" } else { ^ operable.operate() } } } public Program() { var delegator := new Delegator(); new object[]{nil, new Object(), new Operable()}.forEach::(o) { delegator.Delegate := o; Console.printLine(delegator.operate()) } }