结肠:在DART构造函数语法中


class X extends Y {
  X(int a, int b) : super(a,b);
}

有人可以给我关于结肠:的语法含义的解释吗?

dart 中的此功能称为"初始化器列表"。
它允许您初始化类的字段,做出主张并调用超级构造函数。

这意味着它与构造函数车体不同。正如我所说,您只能初始化变量和仅访问 static 成员。您不能调用任何(非静态(方法。

好处是,您还可以初始化 final 变量,您无法在构造体主体中进行。您还可以访问传递给构造函数的所有参数,当直接在括号中初始化参数时,它们没有。
此外,您可以使用分配的左侧类字段,其名称与右侧的参数相同,该名称是指参数的。DART将自动使用左侧的类字段。
这是一个示例:

class X {
  final int number;
  X(number) : number = number ?? 0;
}

上面的代码将名为 number的参数分配给 final 字段 this.number,如果它是非null,否则它分配了 0。这意味着分配的左侧number实际上是指this.number。现在,您甚至可以做出永远不会失败的断言(因此是多余的,但我想解释一切如何一起工作(:

class X {
  final int number;
  X(number): number = number ?? 0, assert(number != null);
}

了解更多。

可以在初始器列表中访问非静态成员。

class Point {
  num x, y;
  Point(this.x, this.y);
  Point.origin(): this.x = 10, this.y = 10;
}
main() {
  Point p = Point.origin();
  print(p.x); // 10
}

最新更新