上一篇: C# 继承

下一篇: C# 运算符重载

C# 多态性

在本教程中,我们将学习C#多态性的基本概念及其应用。

  1. 多态性简介
  2. 虚方法和重写
  3. 抽象类和抽象方法
  4. 接口
  5. 多态性的实际应用示例

多态性简介

多态性是面向对象编程的一个核心概念,它允许使用一个通用类型引用来指向不同的派生类型对象,并根据该对象的实际类型执行相应的方法。这使得我们能够编写更具通用性和灵活性的代码。

虚方法和重写

要实现多态性,首先需要在基类中使用 virtual关键字声明一个方法。然后在派生类中使用 override关键字重写该方法。

                public class Animal
                {
                    public virtual void MakeSound()
                    {
                        Console.WriteLine("The animal makes a sound.");
                    }
                }

                public class Dog : Animal
                {
                    public override void MakeSound()
                    {
                        Console.WriteLine("The dog barks.");
                    }
                }
                

现在,可以使用基类引用来指向派生类对象,并调用相应的方法。

                Animal myAnimal = new Dog();
                myAnimal.MakeSound(); // 输出 "The dog barks."
                

抽象类和抽象方法

抽象类是不能直接实例化的类,它通常包含一个或多个抽象方法。抽象方法使用 abstract关键字声明,没有方法体,并强制要求派生类提供具体实现。

                public abstract class Animal
                {
                    public abstract void MakeSound();
                }

                public class Dog : Animal
                {
                    public override void MakeSound()
                    {
                        Console.WriteLine("The dog barks.");
                    }
                }
                

接口

接口是一种完全抽象的类型,它只包含未实现的方法签名。一个类可以实现一个或多个接口,并提供这些接口所需的所有方法实现。实现多态性时,接口可以作为通用类型引用来使用。

                public interface IAnimal
                {
                    void MakeSound();
                }

                public class Dog : IAnimal
                {
                    public void MakeSound()
                    {
                        Console.WriteLine("The dog barks.");
                    }
                }

                IAnimal myAnimal = new Dog();
                myAnimal.MakeSound(); // 输出 "The dog barks."
                

多态性的实际应用示例

假设我们需要为一个动物园编写一段代码来展示不同动物发出的叫声。我们可以使用多态性轻松实现这个功能。

首先,创建一个抽象的基类 Animal和一些派生类。

                public abstract class Animal
                {
                    public abstract void MakeSound();
                }

                public class Dog : Animal
                {
                    public override void MakeSound()
                    {
                        Console.WriteLine("The dog barks.");
                    }
                }

                public class Cat : Animal
                {
                    public override void MakeSound()
                    {
                        Console.WriteLine("The cat meows.");
                    }
                }
                

接下来,创建一个 Zoo类,它包含一个 Animal类型的列表,并提供一个方法来让所有动物发出叫声。

                public class Zoo
                {
                    private List<Animal> animals;

                    public Zoo()
                    {
                        animals = new List<Animal>();
                    }

                    public void AddAnimal(Animal animal)
                    {
                        animals.Add(animal);
                    }

                    public void MakeAllAnimalsSound()
                    {
                        foreach (Animal animal in animals)
                        {
                            animal.MakeSound();
                        }
                    }
                }
                

最后,我们可以创建一个 Zoo实例并添加一些动物。

                Zoo myZoo = new Zoo();
                myZoo.AddAnimal(new Dog());
                myZoo.AddAnimal(new Cat());
                myZoo.MakeAllAnimalsSound(); // 输出 "The dog barks." 和 "The cat meows."
                

这个教程简要介绍了C#中多态性的基本概念及其应用。通过学习和实践,您将更好地理解并掌握C#多态性的使用方法。