[Mono-list] Abstract classes...

Vadim B. Guzev vguzev@yandex.ru
Fri, 28 May 2004 17:05:51 +0400


I've posted it as a bug #59246
http://bugzilla.ximian.com/show_bug.cgi?id=59246

Best regards,
Vadim B. Guzev
http://u.pereslavl.ru/~vadim/MCSharp/


----- Original Message ----- 
From: "Robert Remen" <Robert.Remen@nextranet.at>
To: <vguzev@yandex.ru>; <mono-list@lists.ximian.com>
Sent: Thursday, May 27, 2004 9:18 PM
Subject: RE: [Mono-list] Abstract classes...


> Hi!
> 
> The implementation of mono compiler is wrong. If you have a mix of
> non-override and override overloads in a class, then the non-override
> overload must take precedence (at compile time).
> 
> From the C# Language Specification:
> 
> - in section 7.4.2:
> 
> "For example, the set of candidates for a method invocation does not
> include methods marked override (Section 7.3), and methods in a base
> class are not candidates if any method in a derived class is applicable
> (Section 7.5.5.1)."
> 
> -in section 7.5.5.1:
> 
> "The intuitive effect of the resolution rules described above is as
> follows: To locate the particular method invoked by a method invocation,
> start with the type indicated by the method invocation and proceed up
> the inheritance chain until at least one applicable, accessible,
> non-override method declaration is found. Then perform overload
> resolution on the set of applicable, accessible, non-override methods
> declared in that type and invoke the method thus selected."
> 
> Robert
> 
> 
> 
> -----Original Message-----
> From: mono-list-admin@lists.ximian.com
> [mailto:mono-list-admin@lists.ximian.com] On Behalf Of vguzev
> Sent: Donnerstag, 27. Mai 2004 17:39
> To: mono-list@lists.ximian.com
> Subject: [Mono-list] Abstract classes...
> 
> Hello!
> 
> 
> I've found some differences between MS .Net and Mono behaviour.
> 
> Here's a little example (from RSDN forum):
> 8<---------------------------------------------------------
> using System;
> 
> namespace TestMethods
> {
>  class Class1
>  {
>   static void Main(string[] args)
>   {
>    TestClass testClass = new TestClass();
>    testClass.AddItem("", new TestParam());
>    testClass.AddItem("", new ParamClass());
> 
>    BaseClass baseClass = testClass as BaseClass;
>    baseClass.AddItem("", new TestParam());
>    baseClass.AddItem("", new ParamClass());
>   }
>  }
> 
>  public class ParamClass {}
> 
>  public class TestParam : ParamClass {}
> 
>  public abstract class BaseClass
>  {
>   public abstract void AddItem(String name, ParamClass val);  }
> 
>  public class TestClass : BaseClass
>  {
>   public void AddItem(String name, Object val)
>   {
>    Console.WriteLine("Method with 'Object val' called");
>   }
> 
>   public override void AddItem(String name, ParamClass val)
>   {
>    Console.WriteLine("Method with 'ParamClass val' called");
>   }
>  }
> }
> 8<---------------------------------------------------------
> 
> MS.Net prints the following:
> 8<---------------------------------------------------------
> Method with 'Object val' called
> Method with 'Object val' called
> Method with 'ParamClass val' called
> Method with 'ParamClass val' called
> 8<---------------------------------------------------------
> 
> Mono prints:
> 8<---------------------------------------------------------
> Method with 'ParamClass val' called
> Method with 'ParamClass val' called
> Method with 'ParamClass val' called
> Method with 'ParamClass val' called
> 8<---------------------------------------------------------
> 
> Who is right? Mono or MS .Net?
> 
> 
> Best regards,
> Vadim B. Guzev
> http://u.pereslavl.ru/~vadim/MCSharp/
> _______________________________________________
> Mono-list maillist  -  Mono-list@lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-list
> 
> 
>