来自:https : //medium.com/dartlang/announcing-dart-2-1-improved-performance-usability-9f55fca6f31a
在Mixins下:
mixin SomeClass<T extends SomeOtherClass>
on State<T>
implements ThirdClass
Run Code Online (Sandbox Code Playgroud)
在放什么”?
形象地说,就是mixins 的扩展。
mixin A on B
Run Code Online (Sandbox Code Playgroud)
就好像
class A extends B
Run Code Online (Sandbox Code Playgroud)
选择使用哪一个就像在组合或继承之间进行选择。更多关于组合与继承的事情。
class ExtraPowers{}
class ClassPowers extends ExtraPowers{}
mixin MixinPowers on ExtraPowers{}
Run Code Online (Sandbox Code Playgroud)
假设我们的主角是“C”级,我们想赋予它一些额外的能力和力量。我们可以通过两种方式做到这一点:
// e.g. inheritance
class C extends ClassPowers{}
Run Code Online (Sandbox Code Playgroud)
或者
// e.g. composition
class C with ExtraPowers, MixinPowers{}
Run Code Online (Sandbox Code Playgroud)
因此,如果我们选择延期,我们可能需要遵守一些要求。我们可以通过将参数传递给super来做到这一点。
如果我们选择使用with来获得权力,则不能使用super来通过要求。通过具有与我们的 mixin 相同的额外功能(没有隐藏任何内容,例如合成)来满足要求,并且关键字告诉我们我们的 mixin 具有哪些额外功能。因此,为了从MixinPowers获得能力,我们首先必须获得ExtraPowers。
class C with ExtraPowers, MixinPowers{}
Run Code Online (Sandbox Code Playgroud)
总而言之,就像extends可以访问另一个对象的成员,但on是用于 mixin扩展类。不同之处在于,当您使用 mixin 时,您必须在on关键字之后实现对象。