静态扩展成员和冲突
解决冲突并添加静态辅助工具
静态扩展成员和冲突 是 CoddyKit 上的免费 Dart Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Dart Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Dart Academy 课程共包含 4 节课。
两个辅助功能,同一个名称
如果导入的两个扩展都为 String 添加了名为 parse 的方法,Dart 就无法知道您指的是哪一个。
冲突为何发生
扩展成员并不属于类型本身,因此两个同名方法会造成歧义,编译器不会擅自猜测。
找出错误
发生这种情况时,Dart 会报告存在歧义的扩展并停止,而不是悄悄替您选出一个。
"7".parse(); // error: ambiguous between two extensions导入时隐藏一个
在导入中使用 hide,按名称移除其中一个冲突的扩展,让另一个扩展可以正常响应调用。
import 'b.dart' hide NumberParsing;或者只显示一个
相反的做法是使用 show:只导入您列出的名称,并静默排除其余名称。
import 'a.dart' show NumberParsing;显式调用
您也可以使用显式应用来精确指定:写出扩展名称,并将值放在括号中传入。
NumberParsing("7").parse();添加静态成员
扩展也可以包含静态成员。这些成员属于扩展名称,而不是属于您调用方法时使用的值。
extension MathX on num {
static num clampLow(num x) => x < 0 ? 0 : x;
}通过名称访问静态成员
通过扩展名称调用静态成员,就像调用类的静态成员一样。这里不会涉及接收者值。
print(MathX.clampLow(-3)); // 0静态成员需要名称
由于静态成员需要通过扩展访问,未命名扩展无法公开它们。要使用静态成员,就必须为扩展命名。
成员与静态成员
实例成员使用 this 并附着在值上;静态成员忽略该值,存在于扩展本身之上。
提前规划,避免冲突
为扩展及其成员取清晰、具体的名称。良好的命名可以在需要使用 show 或 hide 之前,避免大多数冲突。
快速检查
一个冲突,一个干净的解决方案。哪种方式有效?
回顾:静态成员与冲突
您可以使用 show、hide 或显式调用来解决扩展冲突,也可以添加通过扩展名称访问的静态成员。🧩
用 AI 导师学习 Dart — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 30
- 课程
- 120
常见问题解答
「静态扩展成员和冲突」课时是免费的吗?
是的 — 「静态扩展成员和冲突」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Dart Academy 课程的其余内容,请升级到 CoddyKit PRO。 Dart Academy 课程共包含 4 节课。
「静态扩展成员和冲突」这节课中我会学到什么?
解决冲突并添加静态辅助工具 你通过在浏览器中直接运行的动手代码来练习 Dart Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Dart Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Dart Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「静态扩展成员和冲突」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Dart Academy 课中编写并运行代码吗?
能。每节 Dart Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 编写您的第一个扩展
- 泛型上的扩展
- 静态扩展成员和冲突
- 实现零运行时开销包装器的扩展类型