Dart mixin

Dart 的 mixin 特性允许你将一组方法从一个类"混入"到另一个类。

mixin 与接口:Mixin 也可以作为接口使用。但与普通的接口相比,mixin 还可以包含代码实现。

mixin vs 继承:

定义一个 mixin

使用 mixin 关键字。

mixin MyMixin {
  void mixinMethod() {
    print("Mixin Method");
  }
}

注意:

使用一个 mixin

使用 with 关键字将 mixin 混入一个类。

class MyClass with MyMixin {
  // MyClass 的内容
}

使用多个 mixin

通过逗号分隔,可以混入多个 mixin。

class MyClass with Mixin1, Mixin2 {
  // MyClass 的内容
}

限制 mixin 的使用

使用 on 关键字来指定哪些类可以使用此 mixin。

mixin MyMixin on MyBaseClass {
  // 只有继承自 MyBaseClass 的类可以使用这个 mixin
}

mixin 中的冲突解决

如果两个 mixin 有相同的方法或属性,你需要在你的类中重写它来解决冲突。

默认行为

Dart 的解析顺序是从右到左。所以,如果你混入了多个 mixin,最右边的 mixin 中的实现会覆盖其他 mixin 中的同名方法或属性。

解决冲突

示例:

mixin MixinA {
  void show() {
    print("MixinA's show");
  }
}

mixin MixinB {
  void show() {
    print("MixinB's show");
  }
}

class MyClass with MixinA, MixinB {
  @override
  void show() {
	// 调用 MixinB 的 show
	// 因为 MixinB 在混入列表中位于 MixinA 的右边
    super.show();  
    print("MyClass's show");
  }
}

void main() {
  MyClass().show(); 
  // 输出:
  // MixinB's show
  // MyClass's show
}

在上述示例中,MyClass 同时混入了 MixinAMixinB。由于两者都定义了 show 方法,因此在 MyClass 中我们重写了它,并在其中首先调用了 super.show()(即 MixinB 的实现),然后打印了自己的消息。

网络资源


本文作者:Maeiee

本文链接:Dart mixin

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!