从零实现增量源生成器 · 第 9 / 17 篇

属性怎么选,输出面就怎么长

主案例只选择公开、可读、非索引器、非静态属性,这不是保守,而是在明确生成器的输出面。

生成器一旦开始读取成员,就必须回答一个问题:哪些成员值得进入输出面。

当前主案例的选择很明确,只保留:

  • 非索引器
  • 非静态
  • 有公开 getter 的属性

为什么这个选择重要

因为输出面越模糊,行为越难解释。

你如果把私有属性、静态属性、写入专用属性都混进来,后面无论是诊断、测试还是使用者预期都会变乱。一个稳定的生成器,先要能清楚说出“我到底处理哪些成员”。

输出面其实就是契约的一部分

当你决定只处理某一类属性时,本质上已经在对调用方承诺:这些输入会被稳定支持,其它输入暂时不在能力范围内。

很多所谓“功能不够多”的实现,恰恰比“大而全但边界模糊”的实现更适合做第一版。

教程导航

继续阅读

当前文章已经挂到教程顺序中,建议按相邻章节继续。

上一篇 从 Symbol 到模型:生成器为什么需要中间层 不要在拿到 Symbol 后直接拼字符串;先抽出目标类型模型、属性模型和声明模型,渲染层才会稳定。 下一篇 ToString 渲染层到底在解决什么问题 代码渲染不只是拼一段字符串,它要负责重新打开命名空间、嵌套类型和目标类型,并保证输出代码可编译。
查看系列目录 查看全部文章

标签

分类