Z
ZHANK
面向对象

多态

运行时多态、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 模式匹配替代虚方法