[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
>
>
>