C# 多态的应用

摘自《扣响C#之门》

1. 应用程序案例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AnimalDisplay
{
    class Program
    {
        static void Main(string[] args)
        {
            //声明一个基类(Vertebrata 类)的引用符数组 
            Vertebrata[] animals = new Vertebrata[5];
            //让每个引用符指向一个派生类对象
            animals[0] = new Pig();
            animals[1] = new Rabbit();
            animals[2] = new Cattle();
            animals[3] = new Frog();
            animals[4] = new Duck();
            //通用处理
            foreach (Vertebrata someone in animals)
            {
                someone.Display(); //不论对象是什么类型,都使用相同的语句处理 
            }
        }
    }

    //脊柱类
    abstract class Vertebrata
    {
        public abstract void Display();
    }
    //哺乳类
    class Mammal : Vertebrata
    {
        public override void Display()
        {          
        }
    }
    //鸟类
    class Bird : Vertebrata
    {
        public override void Display()
        {
        }
    }
    //两栖类
    class Amphibian : Vertebrata
    {
        public override void Display()
        {
        }
    }

    class Pig : Mammal
    {
        public override void Display()
        {
            Console.WriteLine(@" 
                                 ╭︿︿☆-╮ oοΟ
                                 {/ . .\} 
                                  ( (oo) ) 
                                   ︶︶︶ 
                                我是笨猪我怕谁 ");
        }
    }
    class Rabbit : Mammal
    {
        public override void Display()
        {
            Console.WriteLine(@" 
                                 (\(\  /)/) 
                                 (-.-)(-.-) 
                                小兔子乖乖");
        }
    }
    class Cattle : Mammal
    {
        public override void Display()
        {
            Console.WriteLine(@" 
                                 (___) 
                                 (o o)____( 
                                  @@ `     \ 
                                   \ ____, / 
                                     // // 
                                    ^^ ^^ 
                                 勤劳的牛");
        }
    }
    class Frog : Amphibian
    {
        public override void Display()
        {
            Console.WriteLine(@"      
                                      @..@ 
                                     (\--/) 
                                    (.>__<.) 
                                    ^^^ ^^^ 
                                    青蛙王子");
        }
    }
    class Duck : Bird
    {
        public override void Display()
        {
            Console.WriteLine(@"    
                                     __ 
                                   >(' ) 
                                     )/ 
                                   /( 
                                   / `----/ 
                                   \ ~=- / 
                                   ~^~^~^~^~^~^~^ 
                                   春江水暖鸭先知");
        }
    }
}

2. 多态的优点和应用

  • 我们利用多态性实现了“通用编程”。
  • 程序中的 foreach 语句是通用部分,Vertebrata 型引用符 someone 依次指向数组 animals 中的对象,不管对象是哪种动物,都使用语句“someone.Display()”进行绘图。
  • 系统根据 someone 指向的动物类型调用对应版本的Display()方法。当添加一种新的动物时,只需要往数组里添加一个对象,程序的通用部分不需要修改。
  • 继承和多态性是开发复杂软件的关键技术,特别适合于分层软件系统。
  • 操作系统要处理各种各样的存储介质,比如硬盘、软盘、U 盘等等,这些硬件的具体工作原理显然是不同的,但它们都有读和写两个操作。操作系统可以设计一个抽象基类,提供 Read()和Write()两个抽象函数,各种硬件的驱动程序被编写为该抽象基类的派生类,具体实现 Read()和 Write()操作。操作系统只需通过基类的引用符调用 Read()和 Write()函数即可,不用关心在读取哪种存储介质,更不用关心它们是怎么实现的。当有新设备产生以后,设备生产厂家只需编写继承于抽象基类的驱动程序即可,不用更改操作系统本身。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MechMaster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值