C# 多态性学习笔记
什么是多态性
多态性指的是同一种行为或操作,具体实现方式不同。在C#中,多态性通过两种机制实现:
- 虚方法
- 接口
虚方法实现多态性
虚方法是定义在基类中的方法,可以被子类重写。当调用虚方法时,实际执行的是子类中重写后的方法。
以下是一个简单的例子:
csharpCopy Codepublic 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()
,它被子类Dog
和Cat
重写了。当创建Animal
、Dog
或Cat
实例并调用MakeSound()
方法时,输出的结果不同,这就是多态性的表现。
接口实现多态性
接口是一个描述对象提供的行为的列表,而不是具体的实现。在C#中,一个类可以实现一个或多个接口,并提供各自的实现方式。这样,调用该类时,可以根据需要调用不同的实现方式。
以下是一个简单的例子:
csharpCopy Codepublic 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()
,Circle
和Rectangle
类分别实现了该接口并提供了各自的实现方式。Drawing
类维护了一个IShape
类型的列表,并提供了添加图形和绘制图形的方法。当创建Drawing
实例并添加Circle
和Rectangle
后,调用DrawShapes()
方法时,会按照添加的顺序分别绘制出一个圆和一个矩形。
以上就是C#多态性的基本概念和实现方式的介绍。