C#多态实现之虚方法

来源:互联网 发布:淘宝知识产权申诉失败 编辑:程序博客网 时间:2024/05/17 22:07

控制台应用程序中,新建一个People类文件,代码如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace _13多态{    public class People    {        public People(string name)        {            this.Name = name;        }        public string Name        {            get;            set;        }        //1.第一,将父类中的方法标记为“虚方法”:virtual        //2.当一个方法是虚方法的时候,那么这个方法在子类中就可以被重写了。        //子类继承父类以后,可以直接使用该方法,也可以将该方法重写        public virtual void Show()         {            Console.WriteLine("哈哈哈!");        }    }    /// <summary>    /// 中国人    /// </summary>    public class Chinese : People    {        public Chinese(string name)            : base(name)        {        }        //3.子类如果要重写父类方法,则需要在子类的Show方法前,加一个override关键字,且有且只有这一个表示重写的override关键字。        public override void Show()         {            Console.WriteLine("我叫:{0},我是中国人!!",Name);        }    }    /// <summary>    /// 日本人    /// </summary>    public class Japanese : People    {        public Japanese(string name)            : base(name)        {        }        public override void Show()        {            Console.WriteLine("我叫:{0},我是日本人!!", Name);        }    }    /// <summary>    /// 美国人    /// </summary>    public class American : People    {        public American(string name)            : base(name)        {        }        public override void Show()        {            Console.WriteLine("我叫:{0},我是美国人!!", Name);        }    }    /// <summary>    /// 英国人    /// </summary>    public class English : People    {        public English(string name)            : base(name)        {        }        public override void Show()        {            Console.WriteLine("我叫:{0},我是英国人!!", Name);        }    }}


在主程序Program中使用,代码如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace _13多态{    //多态,即为多种表现形态;现实中就是事物的多种形态。在程序里,表现为父类的对象指向子类的实例,在调用方法时。调用的是子类重写的方法。    //实现手段:虚方法、接口、抽象类    //何时用多态??答:代码重用    class Program    {        static void Main(string[] args)        {            //面向对象重要原则            //对扩展开放,对修改关闭---开放封闭原则,扩展程序的同时不修改源代码            //格式设置热键:Ctrl+K+D:全局;Ctrl+K+F:选中部分:局部。            Chinese c1 = new Chinese("姚明");            Japanese j1 = new Japanese("向井");            American us1 = new American("T-Mac");            //添加一个            English en1 = new English("Tom");            //父类类型指向子类类型,即为实现多态            People p1 = new Chinese("刘翔");            People p2 = new Japanese("松下");            People[] cns = new People[] { c1, j1, us1, en1 };            //遍历数组中的每个元素,调用每个元素的Show方法            for (int i = 0; i < cns.Length; i++)            {                #region 第一种,只有三种国籍,还没有添加英国;旧版本                //判断当前的cns[i]中存储的对象是否是Chinese类型                if (cns[i] is Chinese)                {                    //强制转换                    Chinese cn = (Chinese)cns[i];                    cn.Show();                }                else if (cns[i] is Japanese)                {                    Japanese cn = (Japanese)cns[i];                    cn.Show();                }                else if (cns[i] is American)                {                    American cn = (American)cns[i];                    cn.Show();                }                #endregion                #region 新版本                //在父类中添加virtual虚Show方法,通过cns[i]调用父类中的“虚方法”,进行判,                //如果子类重写了父类的Show方法,则调用子类的Show方法;否则调用父类的Show方法                //即:如果cns[i]中存储的是Chinese类型,则调用Chinese的Show方法;                //这就是多态的体现。                cns[i].Show();                #endregion            }            Console.WriteLine("ok");            Console.ReadKey();        }    }}

Demo下载地址http://download.csdn.net/detail/zxcvbnm32123/5785153

原创粉丝点击