Beta D 2.068.1-b2
Kapps via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Fri Sep 4 10:11:14 PDT 2015
On Friday, 4 September 2015 at 11:44:44 UTC, BBasile wrote:
>
> What's so different with C# 'new' that not to call 'super' in a
> D overriden method ? (even if C# has itself 'base' instead of
> 'super')
>
> C#
> ---
> public class BaseC
> {
> public int x;
> public void Invoke() { }
> }
> public class DerivedC : BaseC
> {
> new public void Invoke() { }
> }
> ---
>
> D
> ---
> class BaseC
> {
> int x;
> void Invoke() { }
> }
> class DerivedC : BaseC
> {
> override void Invoke() { /*super.Invoke() not called*/ }
> }
> ---
>
> apart from a compiler warning
> (https://msdn.microsoft.com/en-us/library/ms173153.aspx=
It is just a warning, because it's ultimately there to warn you
of something you may not have noticed.
For example:
abstract class BaseA {
abstract void foo();
}
class A : BaseA {
override void foo() { }
virtual void foobar() { }
}
All is well.
But then BaseA (which may be in a different library), suddenly
becomes:
abstract class BaseA {
abstract void foo();
virtual void foobar() { dostuff(); }
}
Now you have A, which has foobar, but isn't actually related to
BaseA.foobar. You probably didn't mean to override foobar, but
it's still confusing for anything expecting BaseA.foobar to be
related to A.foobar. You might not even know BaseA.foobar was
added if it was part of a different library. Or, even worse:
class B : A {
override void foobar() {
dootherstuff();
}
}
It definitely gets a bit odd, and new is there just to prevent
confusion / clarify intentions, as well as let you know when a
new method is added with the same name. The whole situation is
messy, like what happens when A.foobar is removed and you
suddenly start overriding BaseA.foobar instead. Or what if you
were intending to override BaseA.foobar, but now you're suddenly
overriding A.foobar once A adds the method? I'd actually prefer
to specifically have to write 'override void A.foobar()' if
A.foobar is marked as 'new' for this reason and make it an error
to not include new or override when dealing with the same name. D
could probably benefit from this approach as well, for the same
reasons.
More information about the Digitalmars-d-announce
mailing list