c#虚方法

  1. 把一个基类函数声明为virtual,就可以在任何派生类中重写该函数:
  2. 在派生类中重写另外一个函数时,要使用override关键字显示声明
  3. 我们在子类里面重写虚函数之后,不管在哪里调用都是调用重写之后的方法
namespace ConsoleApp7
{
    class Enemy
    {
        public virtual void Move()
        {
            Console.WriteLine("这是调用的Enemy.Move()");
        }
        public void AI()
        {
            Move();
            Console.WriteLine("这是调用的Enemy.AI()");
        }
    }
    class Boss:Enemy
    {
        public override void Move()
        {
            Console.WriteLine("这是调用的Boss.Move()");
        }
        public void A()
        {
            Move();
            Console.WriteLine("这是调用的Boss.A()");
        }
    }
    class Program
    {

        static void Main(string[] args)
        {

            Boss boss1 = new Boss();
            boss1.AI();//这是调用的Boss.Move();这是调用的Enemy.AI()
            boss1.Move();//这是调用的Boss.Move()
            boss1.A();//这是调用的Boss.Move();这是调用的Boss.A()

            Console.WriteLine("----------------");

            Enemy enemy = new Enemy();
            enemy.AI();//这是调用的Enemy.Move();这是调用的Enemy.AI()
            enemy.Move();//这是调用的Enemy.Move()

            Console.WriteLine("----------------");

            Enemy boss2 = new Boss();
            boss2.Move();//这是调用的Boss.Move()。如果没有Override(即隐藏函数),则会调用Enemy.Move()

            Console.ReadKey();
        }
    }

}

经典例题(虚方法和隐藏函数之间的区别):

下列代码输出为:

class Father{
   public void F() { Console.WriteLine("A.F"); }
   public virtual void G() { Console.WriteLine("A.G"); }
}
class Son: Father{
   new public void F() { Console.WriteLine("B.F"); }//隐藏了父类中的方法,父类中的F方法还存在
   public override void G() { Console.WriteLine("B.G"); }//重写了父类中的方法,父类中的G方法就不存在了
}
class override_new{
   static void Main() {
      Son b = new Son();
      Father a = b;
      a.F();//通过父类声明的对象 调用隐藏方法,会调用父类中的  A.F
      b.F();//通过子类声明的对象 调用隐藏方法,会调用子类中的  B.F
      a.G();// B.G
      b.G();//B.G
   }
}
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值