Mixin在dart中对特定类的解释

bzzcjhmw  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(106)

我对下面的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');
  }
}


但这并不是我想要的,我只是想在特定的类上进行混合。
我也想知道为什么我不能。
谢谢

yx2lnoni

yx2lnoni1#

你的继承概念是向后的。要 * 使用 * 名为Foo的mixin,使用它的类必须使用with Foo

mixin Foo {
  void f() => print('From Foo');
}

class Bar with Foo { 
  void g() => f();
}

字符串
对于声明mixin MusicalPerformer on Musicianon Musician部分是一个 constraint,它只允许从Musician派生的类使用with MusicalPerformer。请注意mixin documentation的示例:

class SingerDancer extends Musician with MusicalPerformer {
  // ...
}


这个约束意味着MusicalPerformer实际上继承自Musician,而不是相反。
另请参阅lrn's explanation for how Dart mixins work,它描述了合成继承树。

相关问题