Dart中的“with”关键字

时间:2014-02-10 16:32:29

标签: dart

有人可以在Dart中用写一些关键字的正式定义吗?

在官方Dart示例中,我发现:

class TaskElement extends LIElement with Polymer, Observable {

但我仍然无法理解它到底在做什么。

2 个答案:

答案 0 :(得分:27)

with关键字表示使用“mixin”。请参阅here

mixin是指能够将另一个或多个类的功能添加到您自己的类中,而无需继承这些类。现在可以在类上调用这些类的方法,并执行这些类中的代码。 Dart没有多重继承,但使用mixins允许您折叠其他类以实现代码重用,同时避免多重继承会导致的问题。

我注意到你已经回答了一些关于Java的问题 - 用Java术语,你可以把mixin想象成一个接口,它不仅可以指定给定的类将包含给定的方法,还可以提供代码那种方法。

答案 1 :(得分:9)

您可以将mixin视为Java中的Interface和Swift中的协议。这里是简单的示例。

mixin Human {
  String name;
  int age;

  void about();
}

class Doctor with Human {
  String specialization;
  Doctor(String doctorName, int doctorAge, String specialization) {
    name = doctorName;
    age = doctorAge;
    this.specialization = specialization;
  }

  void about() {
    print('$name is $age years old. He is $specialization specialist.');
  }
}


void main() {
  Doctor doctor = Doctor("Harish Chandra", 54, 'child');
  print(doctor.name);
  print(doctor.age);
  doctor.about();
}

希望对理解有所帮助。