F.cs(334,8): error CS0539: ‘I.M’ in explicit interface declaration is not a member of interface
F.cs(20,15): error CS0535: ‘C’ does not implement interface member ‘I.M(out string)’
This is a fun example of a poor error message, and I don’t mean because I named my file F, my interface I, my method M and my class C.
Its poor because the underlying code looks like this:
interface I { bool M(out string); }
class C:I { void M(out string); }
Sure, this is obvious now what is going on, I have void, but I should have bool, but my error message doesn’t include that when it shows the type signature. Now consider what happens when interface I is in an assembly which is given to me. I do not have its source, and there is no documentation. My means of finding the signature of this method are three fold:
- lean on visual studio press F12 to go to reference of the interface and VS shows me type signatures
- use reflector
- monodis mylibrary | grep MethodName
I usually use #1, which is probably why I’ve never seen how horrible this compiler error message is until today. Today, I used #3.
* monodis is from Mono