It's true that CSC is also broken, but that's no excuse for mcs to be broken as well ;-)
C# doesn't allow you to declare static methods on interfaces, but I don't see why mcs should complain when it consumes an interfaces that happens to contain a static method. Also, the error messages doesn't make any sense. BTW, the fix should be trivial and AFAICT it isn't against the C# spec. Regards, Jeroen > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED]] On Behalf Of Serge > Sent: Thursday, August 15, 2002 03:06 > To: [EMAIL PROTECTED] > Subject: Re: [Mono-list] mcs won't allow implementation of > interfaces with static methods > > > > static methods are not allowed on interfaces > > This is not allowed in C# but actually allowed in metadata. > See Part II, 11 Semantics of Interfaces > "Interfaces may have static fields and methods, but they > shall not have instance fields or methods." > > However, I believe, CSC issues error message as well in this > case (when trying to implement interface with static methods). > So perhaps MCS behaviour is correct as well. > > However, it seems that CSC has another error in this respect > (I'm not 100% sure at the moment). > > Consider the following ILASM code that has static member in interface. > (This could be achieved with MC++ as well, I believe). > > .assembly StaticIfc {} > > .class interface public auto ansi StaticIfc { > .method public static int32 GetInt() cil managed { > ldc.i4 0xACDC > ret > } > } > > .class public auto ansi StaticImpl { > .method public static int32 GetInt() cil managed { > call int32 StaticIfc::GetInt() > ret > } > } > > > Now the following will compile correctly with CSC: > > public static void Main() { > Console.WriteLine("0x{0:X}", StaticImpl.GetInt()); > } > > While this will produce invalid code: > > Console.WriteLine("0x{0:X}", StaticIfc.GetInt()); > > It seems that MCS produces correct code in both cases. > > > Sergey > > > ----- Original Message ----- > From: "Martin Baulig" <[EMAIL PROTECTED]> > To: "Jeroen Frijters" <[EMAIL PROTECTED]> > Cc: <[EMAIL PROTECTED]> > Sent: Thursday, August 15, 2002 2:36 AM > Subject: Re: [Mono-list] mcs won't allow implementation of > interfaces with static methods > > > > "Jeroen Frijters" <[EMAIL PROTECTED]> writes: > > > > > When I have a C# class that tries to implement an > interface (created > > > with ILASM) that contains a static method, mcs gives an > error saying > > > that I should implement the static method (which > obviously doesn't make > > > sense). > > > > Hi, > > > > I don't understand what you're trying to do: static methods are not > > allowed on interfaces, that'd be an error CS0106. MCS currently > > doesn't report that error but abort with a parsing error > instead since > > its parser won't recognize `static' as a keyword if it's used on an > > interface method. > > > > ==== > > using System; > > > > interface A > > { > > static void Test (); > > } > > > > class X : A > > { > > public static void Test () > > { > > } > > > > static void Main () > > { > > } > > } > > ==== > > > > -- > > Martin Baulig > > [EMAIL PROTECTED] > > > > > > > > _______________________________________________ > Mono-list maillist - [EMAIL PROTECTED] > http://lists.ximian.com/mailman/listinfo/mono-list > _______________________________________________ Mono-list maillist - [EMAIL PROTECTED] http://lists.ximian.com/mailman/listinfo/mono-list
