C#多态应用

 

一.多态的定义

1.什么是多态

.通过继承实现的不同对象调用相同的方法,表现出不同的行为,称之为多态

2.为什么要用多态

解决:对重复代码频繁修改 

二.实现多态的两个要素

1.子类重写父类的方法

2.具有向上转移,把子类的对象赋值给父类的对象,然后再调用方法,这里调用的是子类的方法

class Animal
{
 	public virtual void call() 
   {
     Console.WriteLine("无声的叫唤"); 
   }

}
class Dog : Animal
 {
        // new的作用是隐藏父类的同名方法
        //public new void call() { 
        //Console.WriteLine("叫声:汪~汪~汪~"); 
        //}  	
        public override  void call() 
          { 
              Console.WriteLine("叫声:汪~汪~汪~"); 
          }
        public void smell() 
    { 
     Console.WriteLine("嗅觉相当不错!");
    }
 }

Animal animal = new Dog(); //向上转型 
animal.call();//输出叫声:汪~汪~汪~

三.多态的两种运用

1.父类做返回值

class Person
    {
        public virtual void Eat()
        {

        }
    }
class WhitePerson:Person
    {
        public override void Eat()
        {
            Console.WriteLine("热狗");
        }
    }

class YellowPerson:Person
    {
        public override void Eat()
        {
            Console.WriteLine("饺子");
        }

        //写一个GetPerson方法,返回值为父类,
        //根据传入的不同人种来确定吃什么
       Person GetPerson(string s)
        {
            Person p=null;
            if (s.Equals("中国人"))
            {
                p = new YellowPerson();
            }
            else if (s.Equals("外国人"))
            {
                p= new WhitePerson();
            }
            else
            {
                return p;
            }
            p.Eat();
            return p;
        }
}

2.父类做参数

class Animal
    {
        public virtual void Swimming()
        {
            Console.WriteLine("动物游泳");
        }
}
class Cat:Animal
    {
        public override void Swimming()
        {
            Console.WriteLine("猫挠");
        }
        //写一个方法,完成动物游泳(对象做参数)
        void GetSwimming(Animal a)//a是引用
        {
            if (a is Cat)
            {
                Cat c = (Cat)a;//向下转型
                c.Swimming();
            }
        }
        static void Main(string[] args)
        {
            Cat c = new Cat();
            Dog d = new Dog();
            Animal a = c;
           // Animal a = d;
            c.GetSwimming(a);
        }
}

四.is和as关键字

is用于判断一个类型是否是一种类型或其父类型   son is Person :真或假

is关键字是用于检查对象是否与给定类型兼容,如果兼容就返回true,如果不兼容就返回false。

as用于引用类型转换   成功则为非空,失败则为空  son as Person:null或对象

as的使用:可用于将对象转换为指定类型,可直接进行类型转换,如果转换成功会返回转换后的对象,如果转换不成功则不会抛出异常,而是返回null。

五.多态的好处

1.可替换性(subst ut ablity) 。多态对已存在代码具有可替换性。

2.可扩充性(extensibility) 。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性, 以及其他特性的运行和操作。

3.接口性(interface-ablity) 。多态是超类通过方法签名, 向子类提供了一个共同接口, 由子类来完善或者覆盖它而实现的。

4.灵活性(flexibility) 。它在应用中体现了灵活多样的操作, 提高了使用效率。

5.简化性(simplicity) 。多态简化对应用软件的代码编写和修改过程, 尤其在处理大量对象的运算和操作时, 这个特点尤为突出和重要。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值