delegate reference

BCS none at anon.com
Wed Sep 9 09:49:34 PDT 2009


Hello Saaa,

> "Daniel Keep" <daniel.keep.lists at gmail.com> wrote in message
> news:h88i4n$235l$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;
>>>>> deleg = &c.method;
>>>>> writefln(deleg()); // 2
>>>>> c=c3;
>>>>> 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... just because you change what c points to doesn't magically
>> rewrite all other references.
>> 
> deleg points to c and c points to c2 and later to c3 while deleg still
> point to c.
> Thus when calling deleg it points to c which now points to c3, thus
> writing '3'.

deleg dosn't have pointer to c, it has a pointer to an object, that is a 
/copy/ of the reference c.




More information about the Digitalmars-d-learn mailing list