C# 是面向对象的编程语言,对象就是面向对象程序设计的核心。所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。C# 面向对象编程有三大特性,它们是封装、继承和多态。本文主要介绍C# 多态。

1、C# 多态

继承使我们可以从另一个类继承属性和方法。多态使用这些方法来执行不同的任务。这使我们能够以不同的方式执行单个方法。

1)引用的多态

父类的引用可以指向本类的对象,父类的引用可以指向子类的对象。

注意:子类的对象不可以指向父类的对象

2)方法的多态

创建本类对象时,调用的方法为本类的方法。创建子类对象时,调用的方法为子类重写的方法或者继承的方法。

注意:父类的引用调用的方法不能是子类独有的方法,必须是从父类继承的方法或重写父类的方法。

2、多态中的引用类型转换

1)向上类型转换(隐式/自动类型转换),是小类型到大类型的转换。不存在风险。

2)向下类型转换(强制类型转换),是大类型向小类型转换。有风险。

3)is 运算符,来解决引用对象的类型,避免类型转换的安全问题。(animal is Cat

注意is 运算符并不是说明对象是某种类型的一种方式,而是可以检查对象是否是给定的类型,或者是否可以转换为给定的类型,如果是,这个运算符就返回true

3、多态实例代码

多态的体现是父类的引用指向了自己的子类对象,父类的引用也可以接收自己的对象。实现多态的前提是必须是类与类之间只有关系,要么继承或实现。通常还有一个前提,存在覆盖。多态的好处是多态的出现大大的提高了程序的扩展性。

例如:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            Animal myAnimal = new Animal();  // 创建 Animal 对象
            Animal myCat = new Cat();  // 创建 Cat 对象
            Animal myDog = new Dog();  // 创建 Dog 对象
            myAnimal.Eat();
            myCat.Eat();
            myDog.Eat();
            Console.ReadKey();
        }
    }
    class Animal
    {
        public virtual void Eat()
        {
            Console.WriteLine("吃饭");
        }
    }
    class Cat : Animal
    {
        public override void Eat()
        {
            Console.WriteLine("吃鱼");
        }
        public void CatchMouse()
        {
            Console.WriteLine("抓老鼠");
        }
    }
    class Dog : Animal
    {
        public override void Eat()
        {
            Console.WriteLine("吃骨头");
        }
        public void KanJia()
        {
            Console.WriteLine("看家");
        }
    }
}

“继承”和“多态性”对于代码可重用性很有用:创建新类时,重用现有类的属性和方法。

推荐文档