delegate reference

Saaa empty at needmail.com
Wed Sep 9 08:57:24 PDT 2009


"Ary Borenszweig" <ary at esperanto.org.ar> wrote in message 
news:h88i6o$23hh$1 at digitalmars.com...
> Saaa wrote:
>> "Daniel Keep" <daniel.keep.lists at gmail.com> wrote in message 
>> news:h88cck$1orc$1 at digitalmars.com...
>>>
>>> Saaa wrote:
>>>> abstract class C
>>>> {
>>>>  int method();
>>>> }
>>>> class C2:C
>>>> {
>>>>  int method() return 2;
>>>> }
>>>> class C3:C
>>>> {
>>>>  int method() return 3;
>>>> }
>>>> int delegate() deleg;
>>>> void main()
>>>> {
>>>>  C c;
>>>>  C2 c2 = new C2;
>>>>  C3 c3 = new C3;
>>>>  c=c2;
>
> c --> c2.method
>         ^
>         |
> deleg ---
>
>>>>  deleg = &c.method;
>>>>  writefln(deleg()); // 2
>>>>  c=c3;
>
> Now:
>
> c --> c3.method
>
>       c2.method
>         ^
>         |
> deleg ---
>
>>>>  writefln(deleg()); // 2
>>>>  // I expected this to write 3, why is this not so?
>>> Because you didn't reassign deleg.
>> but isn't deleg pointing to c's method?
>
> Yes, to previous c's method. See above.
>
> Remember that a delegate is a pair: an instance and it's method. You can't 
> just point to a class' method, you are always pointing to a instance's 
> method.
>
> (that's why my arrows point to the dot :-P)

Ok, disregard my last comment :D
How should I do this then? 




More information about the Digitalmars-d-learn mailing list