• 实现多态的手段1 --虚方法virtual


    首先我们建立一个Person类,和几个类继承person

    public class Person {
            public string Name { get; set; }
            public string Sex { get; set; }
            public int Age { get; set; }    
        }

       public class American : Person {

         //写一个sayNationality()方法说出自己的国籍
           public  void sayNationality()
            {
                Console.WriteLine("USA");
            }
        }
        public class Japanese : Person
        {
      public  void sayNationality()
            {
                Console.WriteLine("日本");
            }
        }
        public class Chinese : Person
        {
          public  void sayNationality()
            {
                Console.WriteLine("中国");
            }
        }
        public class faguo : Person
        {
           public  void sayNationality()
            {
                Console.WriteLine("法国");
            }
        }

    2.让每一个子类说出自己国家的国籍

    3.遍历出结果

       class Program
        {
            static void Main(string[] args) {
                //Person p = new American();
                //p.sayNationality();
                Person[] pers = new Person[6];
                pers[0] = new American();
                pers[1] = new Chinese();
                pers[2] = new Japanese();
                pers[3] = new American();
                pers[4] = new Chinese();
                pers[5] = new faguo();

                //遍历数组
                for (int i = 0; i < pers.Length; i++)
                {
                    //简单的几个国家可以使用if else判断,但是如果想让程序具有可扩展性,那么使用方法重载
                    #region 不能忍的代码
                    //if (pers[i] is American) {
                    //    ((American)pers[i]).sayNationality();
                    //}
                    //else if (pers[i] is Chinese) {
                    //    ((Chinese)pers[i]).sayNationality();
                    //}
                    //else if (pers[i] is Japanese)
                    //{
                    //    ((Japanese)pers[i]).sayNationality();
                    //}
                    //希望一句话解决
                    #endregion
               
                }
                Console.ReadKey();
            }
        }

    4.如果是只有几条简单的数据时,我们可以使用循环打印,如果很多条数据,为了程序的扩展性则需要使用虚方法实现多态

       1.在父类里写虚方法

        public class Person {
            public string Name { get; set; }
            public string Sex { get; set; }
            public int Age { get; set; }    

            使用virtual关键字实现虚方法

        public virtual void sayNationality()
            {
                Console.WriteLine("地球人");
            }
        }

     2.在每一个子类中对虚方法进行重写

         public class American : Person {
            //说出自己的国籍通过override关键字重写子类,例举一个
            public override   void sayNationality()
            {
                Console.WriteLine("USA");
            }
        }

    3.在遍历结果的时候只需要调用父类中的虚方法就可以实现输出对应国家的名字,不需要繁琐的判断

        class Program
        {
                 同上
                //遍历数组
                for (int i = 0; i < pers.Length; i++)
                {
                    //简单的几个国家可以使用if else判断,但是如果想让程序具有可扩展性,那么使用方法重载
                    #region 不能忍的代码
                    //if (pers[i] is American) {
                    //    ((American)pers[i]).sayNationality();
                    //}
                    //else if (pers[i] is Chinese) {
                    //    ((Chinese)pers[i]).sayNationality();
                    //}
                    //else if (pers[i] is Japanese)
                    //{
                    //    ((Japanese)pers[i]).sayNationality();
                    //}
                    //希望一句话解决
                    #endregion
                    pers[i].sayNationality();
                }
                Console.ReadKey();
            }
        }

  • 相关阅读:
    设置IIS允许下载.config文件
    SQL Server 触发器
    MVC参数自动装配
    sql之left join、right join、inner join的区别
    C# 之泛型详解
    Frameset使用教程
    网页引用Font Awesome图标
    ubuntu下apache2 安装 配置 卸载 CGI设置 SSL设置
    深入理解JAVA I/O系列二:字节流详解
    深入理解JAVA I/O系列三:字符流详解
  • 原文地址:https://www.cnblogs.com/wangcongsuibi/p/7149536.html
Copyright © 2020-2023  润新知