C# 多态性学习笔记

什么是多态性

多态性指的是同一种行为或操作,具体实现方式不同。在C#中,多态性通过两种机制实现:

  • 虚方法
  • 接口

虚方法实现多态性

虚方法是定义在基类中的方法,可以被子类重写。当调用虚方法时,实际执行的是子类中重写后的方法。

以下是一个简单的例子:

csharpCopy Code
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"); } } public class Cat : Animal { public override void MakeSound() { Console.WriteLine("The cat meows"); } } Animal animal = new Animal(); animal.MakeSound(); // 输出 "The animal makes a sound" Dog dog = new Dog(); dog.MakeSound(); // 输出 "The dog barks" Cat cat = new Cat(); cat.MakeSound(); // 输出 "The cat meows"

在该例子中,Animal类有一个虚方法MakeSound(),它被子类DogCat重写了。当创建AnimalDogCat实例并调用MakeSound()方法时,输出的结果不同,这就是多态性的表现。

接口实现多态性

接口是一个描述对象提供的行为的列表,而不是具体的实现。在C#中,一个类可以实现一个或多个接口,并提供各自的实现方式。这样,调用该类时,可以根据需要调用不同的实现方式。

以下是一个简单的例子:

csharpCopy Code
public interface IShape { void Draw(); } public class Circle : IShape { public void Draw() { Console.WriteLine("Drawing a circle"); } } public class Rectangle : IShape { public void Draw() { Console.WriteLine("Drawing a rectangle"); } } public class Drawing { private List<IShape> shapes = new List<IShape>(); public void AddShape(IShape shape) { shapes.Add(shape); } public void DrawShapes() { foreach (IShape shape in shapes) { shape.Draw(); } } } Drawing drawing = new Drawing(); drawing.AddShape(new Circle()); drawing.AddShape(new Rectangle()); drawing.DrawShapes();

在该例子中,IShape接口定义了一个方法Draw()CircleRectangle类分别实现了该接口并提供了各自的实现方式。Drawing类维护了一个IShape类型的列表,并提供了添加图形和绘制图形的方法。当创建Drawing实例并添加CircleRectangle后,调用DrawShapes()方法时,会按照添加的顺序分别绘制出一个圆和一个矩形。

以上就是C#多态性的基本概念和实现方式的介绍。