Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
54
Task/Delegates/Objeck/delegates.objeck
Normal file
54
Task/Delegates/Objeck/delegates.objeck
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
interface Thingable {
|
||||
method : virtual : public : Thing() ~ String;
|
||||
}
|
||||
|
||||
class Delegator {
|
||||
@delegate : Thingable;
|
||||
|
||||
New() {
|
||||
}
|
||||
|
||||
method : public : SetDelegate(delegate : Thingable) ~ Nil {
|
||||
@delegate := delegate;
|
||||
}
|
||||
|
||||
method : public : Operation() ~ String {
|
||||
if(@delegate = Nil) {
|
||||
return "default implementation";
|
||||
}
|
||||
else {
|
||||
return @delegate->Thing();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
class Delegate implements Thingable {
|
||||
New() {
|
||||
}
|
||||
|
||||
method : public : Thing() ~ String {
|
||||
return "delegate implementation";
|
||||
}
|
||||
}
|
||||
|
||||
class Example {
|
||||
function : Main(args : String[]) ~ Nil {
|
||||
# Without a delegate:
|
||||
a := Delegator->New();
|
||||
Runtime->Assert(a->Operation()->Equals("default implementation"));
|
||||
|
||||
# With a delegate:
|
||||
d := Delegate->New();
|
||||
a->SetDelegate(d);
|
||||
Runtime->Assert(a->Operation()->Equals("delegate implementation"));
|
||||
|
||||
# Same as the above, but with an anonymous class:
|
||||
a->SetDelegate(Base->New() implements Thingable {
|
||||
method : public : Thing() ~ String {
|
||||
return "anonymous delegate implementation";
|
||||
}
|
||||
});
|
||||
|
||||
Runtime->Assert(a->Operation()->Equals("anonymous delegate implementation"));
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue