Dart Mixin ( 混入 )

Mixin

在 Dart 2.1.0版本后,引入了 mixin 专门定义混入类型,这样使得语义更加清晰,可以对比一下下面的两种实现方式。

很显然,使用 mixin 会让我们更清晰地知道这是一个混入类型,而不会当做一个类来使用。

官方的建议是,自 Dart 2.1.0版本以后,不应该再使用 class 关键字定义混入类型,以避免出现随意混入,导致代码不好维护。

Mixin 和 class 比较类似,但它没有构造函数。通过 Mixin,可以扩展一个类的属性和功能,使得类具有 Mixin 类的属性和函数 API。

同时 Mixin 也解决了 dart 单一继承的问题。

Mixin 类声明语法

abstract class 类名称{}

子类混入语法

class 子类 with 类名称{}

示例

abstract class Animal {
  late String name;
  late int age;
}

mixin class NickName {
  late String nickName;
}

class Dog extends Animal with NickName {
  Dog(String name, int age, String nickName) {
    this.name = name;
    this.age = age;
    this.nickName = nickName;
  }
  void Say() {
    print("My name is ${this.name}, I am ${this.age} years old.");
    print("My nick name is ${this.nickName}.");
  }
}

void main(List<String> args) {
  Dog dog = Dog("wangcai", 2, "dog");
  dog.Say();
}

注意

多个混入时,如果有同名属性,后引入的类会覆盖前面引入类的属性。