import extensions; import system'routines; interface IOperable { abstract operate() {} } class Operable : IOperable { constructor() {} operate() = "delegate implementation"; } class Delegator { object theDelegate; set Delegate(object) { theDelegate := object } internal operate(operable) = "default implementation"; internal operate(IOperable operable) = operable.operate(); operate() <= operate(theDelegate); } public program() { var delegator := new Delegator(); new::(nil, new Object(), new Operable()).forEach:(o) { delegator.Delegate := o; console.printLine(delegator.operate()) } }