RosettaCodeData/Task/Delegates/Elena/delegates-1.elena

47 lines
709 B
Plaintext

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())
}
}