interface final members

Jacob Carlborg doob at me.com
Tue Feb 21 09:41:46 PST 2012


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, Joshua
>>
>>
>
> I 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


More information about the Digitalmars-d-learn mailing list