Object中包含两个Equals方法,全部都是virtual方法,其中一个是静态的。在ChildClassLevel2你是override Equals(object)方法,还是定义了新的Equals方法?如果定义新方法,参数类型不能是object。
ChildClassLevel4和ChildClassLevel2是同样的道理。在《C# Primer》是lippman有关于方法的相关说明,你可以看一下。按照你的类结构,ChildClassLevel4没有精确匹配,会在当前类查找是否可以使用类型转换找到类似方法,如果当前类找不到会到父类中查找,依此类推。1、Equals实现,完全根据功能需要,不必须调用base.Equals方法。2、不会出错。ChildClassLevel4中使用base.Equals方法,调用的是ChildClassLevel2的Equals方法。(前提是:要保证参数列表相同)

解决方案 »

  1.   

    关于重载方法的匹配问题,lippman在《C++ Primer》中做了非常详细的说明,C#我没看过比较详细的说明,哪位朋友如果有相关资料可以推荐一下。如果以上说明有误,请朋友指正。
      

  2.   

    建议楼主看看《.Net 框架程序设计》。
    Jeffrey Richter对关于对象比较问题解释的很详细,也很准确!
    好象是第6章节!
      

  3.   

    using System;namespace TestOverrideMethod
    {
        /// <summary>
        /// Class1 的摘要说明。
        /// </summary>
        class Startup
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main(string[] args)
            {
                //
                // TODO: 在此处添加代码以启动应用程序
                //
                First f1 = new First();
                Second s1 = new Second();
                Third t1 = new Third();
                Forth fo = new Forth();            Console.WriteLine("{0}Class First", Environment.NewLine);
                f1.Equals(1);            Console.WriteLine("{0}Class Second", Environment.NewLine);
                s1.Equals(1);            Console.WriteLine("{0}Class Third", Environment.NewLine);
                t1.Equals(1);            Console.WriteLine("{0}Class Forth", Environment.NewLine);
                fo.Equals(1);            Console.ReadLine();
            }
        }    #region test class    class First
        {
        }    class Second : First
        {
            public override bool Equals(object obj)
            {
                Console.WriteLine("Second - Equals");
                
                return true;
            }        public override int GetHashCode()
            {
                return base.GetHashCode ();
            }
        }    class Third : Second
        {
        }    class Forth : Third
        {
            public override bool Equals(object obj)
            {
                Console.WriteLine("Forth - Equals");
            
                return base.Equals (obj);
            }        public override int GetHashCode()
            {
                return base.GetHashCode ();
            }
        }    #endregion
    }
      

  4.   

    Class FirstClass Second
    Second - EqualsClass Third
    Second - EqualsClass Forth
    Forth - Equals
    Second - Equals
      

  5.   

    以上是演示代码和结果。在vs.net建立一下Console工程,测试一下就可以了。
    to  magiccoder
    看看先。
    其实,这部分应该属于C#部分,纯语言的,和平台无关。
    当然C#是基于.net framework的,你的建议也有道理。