On Wednesday, 6 December 2017 at 07:23:29 UTC, IM wrote:
Assume the following:
interface IFace {
void foo();
void bar();
}
abstract class A : IFace {
override void foo() {}
}
class B : A {
override void bar() {}
}
Now why this fails to compiler with the following message:
--->>>
function bar does not override any function, did you mean to
override 'IFace.bar()'?
<<<---
Obviously, I meant that, since the abstract class A implements
IFace, and B derives from A.
Do I need to declare IFace's unimplemented methods in A as
abstract? If yes, why? Isn't that already obvious enough (any
unimplemented virtual function is abstract)?
bar() is not a virtual function, but is defined in the interface
IFace and thus you don't need to override it in B.
The same goes for foo() which I'd argue should have given same
error.
What you possibly wanted to do is this:
interface IFace {
void foo();
void bar();
}
abstract class A : IFace {
abstract void bar(); // All child classes must implement bar
and override it
abstract void foo(); // Since A implements IFace we must
implement both bar() and foo()
// However it's an abstract class, so we
can leave implementation
// up to the children.
}
class B : A {
override void bar() {}
override void foo() {}
}