Inheritance from multiple interfaces with the same method name
Mike Franklin
slavo5150 at yahoo.com
Thu Dec 7 00:45:21 UTC 2017
On Wednesday, 6 December 2017 at 23:56:33 UTC, Q. Schroll wrote:
>
> What is D's position on that? The interface spec [2] does not
> say anything about that case.
>
It seems it's allowed, but the caller is required to disambiguate.
import std.stdio;
interface I { void f(); }
interface J { int f(); }
class A : I, J
{
void f() { writeln("void f()"); }
int f() { writeln("int f()"); return 0; }
}
void main()
{
A a = new A();
// Error: A.f called with argument types () matches both:
A.f() and A.f()
// Yeah, that error message could be better.
//a.f();
(cast(I)a).f(); // prints "void f()"
(cast(J)a).f(); // prints "int f()"
}
https://run.dlang.io/is/lZSblC
Mike
More information about the Digitalmars-d
mailing list