[Mono-list] Interface collisions
Quentin DELANCE
quentin.delance@insalien.org
Tue, 10 Dec 2002 22:58:09 +0500
Miguel de Icaza wrote:
> Hello,
>
>
>>Which is fine except that in the book the output of csc looks even
>>smarter. The error used is CS 0111 and states that it is not possible to
>>implement these interface at the same time. It would be nice if mcs
>>could do the same...
>
>
> Please file a `wish list' bug in bugzilla.ximian.com
>
Well that is not needed after all !
After spending some more time on it, here is another code sample :
$ cat InterfaceCollision.cs
using System;
interface I1 { void F(); }
interface I2 { int F(); }
public class TestClass : I1, I2
{
void F() {}
int F() {}
}
$ mcs InterfaceCollision.cs
InterfaceCollision.cs(9) error CS0111: Class `TestClass' already defines
a member called `F' with the same parameter types
Compilation failed: 1 error(s), 0 warnings
This time, I get the expected CS0111 error. The difference is that this
time, both methods have been implemented in "TestClass" which was not
the case previously. After rereading Thinking in C#, the behaviour is
the same for mcs, that's to say :
+ if methods are not implemented -> CS0536 (no checking wether there
could be conflicts with overloading without explicit implementation by
prepending the name of the class to the method ie I1.F)
+ if methods are implemented and a conflict exists -> CS0111
Sorry, my first tests were too simple to fully understand the problem.
As said in the book, these a cases were "implementation and overloading
get unpleasantly mixed".
> Note that its possible to implement the interface methods if you use
> explicit interface implementation.
>
Yes, Jonathan also pointed this to me. It is also covered by the book
and I was not familiar with this syntax !
One must be brave to implement compilers ;)
To sum up, I will only fill a low priority bug for the parser error
(unexpected key word public in interfaces)
Many thx for the support !
Quentin