日期:2014-05-18  浏览次数:20777 次

C#新手提问,送分求解答!关于密封类问题
我学C# 测试下密封类的使用,写了如下代码,我并没有重写或继承Man这个类,为什么老提示我 “错误 1 因为“test.Man.Walk()”不是重写,所以无法将其密封 C:\Users\Administrator\Documents\Visual Studio 2008\Projects\test02\test02\Program.cs 20


C# code
using System;

namespace test
{
    class Animal
    {
        public void Eat()
        {
            Console.WriteLine("Animal eating");
        }
    }

    class Man : Animal
    {
        public new void Eat()   //继承后重写 Eat 使用new
        {
            Console.WriteLine("Man eating");
        }

        public sealed void Walk()  //封装Walk方法,继承后不能重写
        {
            Console.WriteLine("Man Walk !");
        }
    }



    class Program
    {
        static void Main()
        {
            Man q = new Man();
            q.Eat();
        }
    }
}




------解决方案--------------------
探讨

(1)首先你根本就不理解什么是重写,new 一个方法根本就不是重写。而是隐藏,本质上和你随便写一个方法是一样的,加上new只是因为和父类重名而已。这个方法和继承的类没有任何关系。

简单来说,隐藏方法虽然在教科书上反复被提到,但是实际上初学者根本不可能用到。也就是说,让初学者比较什么virtual/override 和 new,还不如根本不告诉初学者有后者。这种教学简直误人子弟。

(2……