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
}