多态
运行时多态、is/as 类型判断、pattern matching、抽象方法
多态
多态让你用基类/接口类型引用不同的子类对象——运行时自动调用正确的实现。
学完本章你将: 掌握运行时多态、is/as 类型判断、抽象方法。
多态实战
csharp
var shapes = new Shape[]
{
new Circle(5),
new Rectangle(3, 4),
new Triangle(3, 4, 5),
};
foreach (var shape in shapes)
Console.WriteLine($"面积:{shape.Area():F2}");
// Circle、Rectangle、Triangle 各自的 Area 实现被正确调用
is / as —— 安全类型转换
csharp
// is + 模式匹配(推荐)
if (shape is Circle c)
Console.WriteLine($"半径:{c.Radius}");
// is + 属性模式
if (shape is Circle { Radius: > 10 })
Console.WriteLine("大圆");
// as —— 安全转换
var circle = shape as Circle;
if (circle != null)
Console.WriteLine(circle.Radius);
多态性能提示
csharp
// 虚方法调用有微小开销(vtable 查找)
// 对性能敏感的场景:
// - sealed 类的方法可被 JIT 内联
// - 泛型 + 接口可避免装箱
// - 对于热路径,可以用 switch 模式匹配替代虚方法