method returning child, doesn't overrides declared method returning parent

Steven Schveighoffer schveiguy at yahoo.com
Tue Aug 30 10:16:58 PDT 2011


On Tue, 30 Aug 2011 13:06:02 -0400, Timon Gehr <timon.gehr at gmx.ch> wrote:

> On 08/30/2011 06:43 PM, Steven Schveighoffer wrote:
>> On Tue, 30 Aug 2011 12:29:59 -0400, Andrei Alexandrescu
>> <SeeWebsiteForEmail at erdani.org> wrote:
>>
>>> On 8/30/11 11:06 AM, Steven Schveighoffer wrote:
>>>> When I write code that derives from a base class, I'm declaring with
>>>> override that I want to implement the base class' function.
>>>> When I write code that implements an interface, I'm declaring with
>>>> override that I want to implement the interface's function.
>>>
>>> From the cycle "deadpan answers": I think one should use "override"
>>> when one wants to override.
>>
>> Then your description of cases where override helps prevent bugs should
>> reflect that:
>>
>> (a) User thinks she overrides a specific method but instead introduces a
>> new one.
>>
>> (b) User thinks she introduces a new method but instead overrides one.
>>
>> I consider implementing an interface method to be hooking, since you are
>> hooking calls from said interface.
>>
>> I guess if we want to avoid solving all hooking problems, even those
>> where one does not intend to implement an interface, but accidentally
>> does, or introduce large annoyances where someone changes a widely used
>> interface to an abstract class, then I guess the status quo is good.
>>
>> -Steve
>
> I don't think that you can change a widely used interface into an  
> abstract class and not introduce annoyances much larger than override is  
> capable of creating.

interface I
{
    int foo();
    void bar();
}

->

interface _I
{
    int foo();
    void bar();
}

abstract class I : _I
{
    int foo() { return 0; }
}

Now, everywhere I was implemented before has to change all their  
implementations of foo() to override, just to compile.

There may be some cases where classes already  had a base class, but it  
depends on the context of where I is implemented.  However, in 100% of the  
cases, putting override on each implementation of foo does *not* result in  
a bug.

My point is, what "bug" is it preventing by rejecting override when  
implementing an interface?  The only "bug" I see is that you didn't put  
override in the signature.  That translates to an annoyance, not a real  
bug.

> How does the status quo prevent implementing interface methods by  
> accident?

It doesn't.  That was my point.

-Steve


More information about the Digitalmars-d mailing list