Dart 2.1中的Mixins-“ on”关键字

Chr*_* G. 5 dart

来自: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)

在放什么”?

Gün*_*uer 5

此混合仅可应用于扩展或实现的类,State<T>这实际上是有状态窗口小部件的状态。


Sim*_*eon 2

形象地说就是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关键字之后实现对象。

更多信息