C#关于虚方法和重写的实例说明(virtual 和override)

来源:互联网 发布:阿里云对象oss怎么用 编辑:程序博客网 时间:2024/06/05 17:00
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleAppsTest{    class Program    {        static void Main(string[] args)        {            D d = new D();            A a = d;            B b = d;            C c = d;            a.F();            b.F();            c.F();            d.F();            a.F1();            a.F2();            c.F1();            c.F2();            Console.ReadKey();        }    }    public class A    {        public virtual void F()        {            Console.WriteLine("A.F");        }        public void F1()        {            Console.WriteLine("A.F1");        }        public virtual void F2()        {            Console.WriteLine("A.F2");        }    }    public class B : A    {        public override void F()        {            Console.WriteLine("B.F");        }    }    public class C : B    {        new public virtual void F()        {            Console.WriteLine("C.F");        }        new public  void F1()        {            Console.WriteLine("C.F1");        }    }    public class D : C    {        public override void F()        {            Console.WriteLine("D.F");        }    }}

执行结果如下:


说明:

就 类A 来说,其他类同:

A 是a 的声明类;D是实例类

在调用实例a的方法时,首先是在声明类A中找此方法,如果有此方法并且是非虚方法,就直接执行该方法;如果有此方法并且是虚方法,就在A的子类中找,如果在子类B中找到该方法的重写,就执行B中的重写方法;如果没有找到B中对该方法的重写,就执行A类的虚方法。注意:如果A a =new A();调用a的方法时,都执行A类自己的方法。

如果有子类new 一个方法时,就表示覆盖了基类的该方法,调用时就执行自己的new方法;

如果子类中没有该方法,调用基类的方法时,执行基类的方法。





原创粉丝点击