C#中满足重写的条件有什么?

老师给提出这么个课后问题,还真不知道怎么回答
2025-04-24 12:35:00
推荐回答(2个)
回答1:

父类必须有公共的虚方法,即使用了关键字virtual加以修饰,且访问修饰符不能是私有的,必须是public或protected的。所以满足重写的条件总结如下:


1、父类必须有公共(public)或受保护(protected)的虚方法(virtual); 

2、在派生类里使用override关键字来重写父类的虚方法。

 // 示例如下:
 public class Person {
        public virtual void SayHello() {
            Console.WriteLine("你好.");
        }
        protected virtual void SayHello2(){
          Console.WriteLine("你好.");
        }
    }

    public class AOBAMA:Person
    {
        override public void SayHello()
        {
            Console.WriteLine("Hello.");
        }

        override protected void SayHello2()
        {
            base.SayHello2(); // 调用父类的虚方法
            Console.WriteLine("Hello,重写后的方法.");
        }
    }
    class Program:AOBAMA 
    {
        static void Main(string[] args)
        {
            AOBAMA aobama = new AOBAMA();
            aobama.SayHello();

            Program p = new Program();
            p.SayHello2();  // 调用父类受保护的方法

            Console.ReadKey(true);
        }
    }

回答2:

1:抽象类中的抽象方法,继承类必须重写方法;
2:基类中的虚方法,继承类可以重写,可以不重写;
3:基类中普通方法,继承类使用new关键字重写;