← 学习中心

Trait 对象与动态分发

dyn Trait:何时用、对象安全限制

本节你将能

使用 dyn Trait 做异构集合,并说明对象安全的基本限制。

直觉模型

泛型像「编译期复印多份说明书」;trait 对象像「运行时按虚表查该调用谁」——灵活但有间接成本。

核心要点

  • Box<dyn Summary> 可装不同具体类型
  • 对象安全:方法不能返回 Self 等(简化理解)
  • 热路径优先泛型;插件/UI 组件列表等场景适合 dyn
fn notify_all(items: &[Box]) {
    for i in items { println!("{}", i.summarize()); }
}

常见误区

无差别全部改成 dyn——丢失内联与单态化优化。

动手

用 Vec<Box<dyn Draw>> 存放圆形与矩形并统一 draw。

互动

完成测验;第五章进入并发。

本节小结

泛型与 dyn 是同一抽象的两种落地方式。

Trait 对象与动态分发 - 生命科学与前沿科技学习平台 | 必学必会