[Issue 2050] interfaces should allow final methods with body

Robert Fraser fraserofthenight at gmail.com
Mon Apr 28 09:16:24 PDT 2008


d-bugmail at puremagic.com wrote:
> http://d.puremagic.com/issues/show_bug.cgi?id=2050
> 
> 
> 
> 
> 
> ------- Comment #6 from andrei at metalanguage.com  2008-04-28 11:12 -------
> (In reply to comment #5)
>> d-bugmail at puremagic.com wrote:
>>> http://d.puremagic.com/issues/show_bug.cgi?id=2050
>>>
>>>
>>>
>>>
>>>
>>> ------- Comment #2 from andrei at metalanguage.com  2008-04-28 02:21 -------
>>> (In reply to comment #1)
>>>> That would open the door to the dreaded diamond pattern.
>>>>
>>>> You'd just have the compiler generate ambiguity errors in those cases I
>>>> suppose?
>>> The diamond pattern can't occur in schemes with single inheritance of
>>> implementation.
>> That's true, but the purpose of interfaces is to allow for multiple 
>> inheritance in a safe way. Say you have two interfaces, IZombie from 
>> Library A and IPirate from Library B. You have a class ZombiePirate that 
>> implements both these interfaces. Right now, IZombie has a final method 
>> "dance()", and IPirate has the dance() method as virtual. All is well, 
>> since a call to an instance's dance() method would result in 
>> IZombie.dance()'s implementation being called. But if IPirate suddenly 
>> got a dance() implementation, your code would break simply by updating 
>> Library B.
> 
> Such cases would be flagged as ambiguous.

Right, but the ambiguity would be caused at no fault of the code being 
compiled, but because something changed in a different module. In many 
ways, it's similar to hijacking.


More information about the Digitalmars-d-bugs mailing list