The impoliteness of overriding methods
foobar
foo at bar.com
Thu Dec 20 11:12:26 PST 2012
On Thursday, 20 December 2012 at 10:22:56 UTC, Benjamin Thaut
wrote:
> Am 20.12.2012 10:44, schrieb sclytrack:
>>
>> I guess in the polite version you would make the call to the
>> derived
>> version here. The derived version wouldn't have to call super
>> or anything.
>>
>
> The problem I have with the inner method is performance. With
> the super method you know which method to call at compile time.
> The call can even be inlined. With the inner method you have to
> do another vtable lookup for each inner call. If implemented it
> should be possible to choose on a per method basis which kind
> of overriding policy is used, in my opinion.
This argument is false.
With the current "usual" design:
Base instance = new Derived();
instance.method(); // #1
With Beta design:
Base instance = new Derived();
instance.method(); // #2
In case #1, the call to method itself is virtual while the call
to super is not, whereas in case #2 the call to method is _not_
virtual, but the call to inner is virtual. Either way you get one
virtual call. The difference is the direction of the calls.
More information about the Digitalmars-d
mailing list