On 2012-02-21 14:15, Mantis wrote:
21.02.2012 14:46, Joshua Reusch пишет:interface I { final int foo(I other, int a, int b) { return other.foo(a,b) + a*b; } int foo(int a, int b); }class A : I { int foo(int a, int b) { return a*b; } } void main() { A a = new A; a.foo(5,5); a.I.foo(a, 5,5); a.foo(a, 5,5); //line 22 } --------- $ rdmd interface_final_test interface_final_test.d(22): Error: function interface_final_test.A.foo (int a, int b) is not callable using argument types (A,int,int) interface_final_test.d(22): Error: expected 2 arguments, not 3 for non-variadic function type int(int a, int b) --------- Why do I need to write a.I.foo instead of a.foo to call the final method of the interface ? Thank you, JoshuaI can't comment on the behaviour, but you may find this workaround useful: class A : I { alias I.foo foo; int foo(int a, int b) { return a*b; } }
It's because the base class and the subclass use different overload sets, or something like that.
-- /Jacob Carlborg
