Hello Saaa,

"Daniel Keep" <daniel.keep.li...@gmail.com> wrote in message
news:h88i4n$235...@digitalmars.com...

Saaa wrote:

"Daniel Keep" <daniel.keep.li...@gmail.com> wrote in message
news:h88cck$1or...@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.


Reply via email to