我对下面的dart行为感到困惑,我想让我的mixin
在特定的类上,所以我写了这样的东西:
class Musician {
callMixinPerform() {
perform();
}
}
mixin MusicalPerformer on Musician {
perform() {
print('perform mixin');
}
}
字符串
音乐家班不承认perform()
我想知道为什么?
我在mixin doc中没有找到适当的解释(或者我没有理解它)
我可以这样做:(我也可以创建没有on
的mixin)
class Musician extends Child with MusicalPerformer{
callMixinPerform() {
perform();
}
}
class Child {}
mixin MusicalPerformer on Child {
perform() {
print('perform mixin');
}
}
型
但这并不是我想要的,我只是想在特定的类上进行混合。
我也想知道为什么我不能。
谢谢
1条答案
按热度按时间yx2lnoni1#
你的继承概念是向后的。要 * 使用 * 名为
Foo
的mixin,使用它的类必须使用with Foo
:字符串
对于声明
mixin MusicalPerformer on Musician
,on Musician
部分是一个 constraint,它只允许从Musician
派生的类使用with MusicalPerformer
。请注意mixin documentation的示例:型
这个约束意味着
MusicalPerformer
实际上继承自Musician
,而不是相反。另请参阅lrn's explanation for how Dart mixins work,它描述了合成继承树。