Dart中的构造方法和初始化方法列表有什么区别?

时间:2018-08-25 01:36:08

标签: dart

问题

以下两个代码的输出相同,但是本质区别是什么?

A Tour of the Dart Language - Initializer list

import 'dart:math';

class Point {
  final num x;
  final num y;
  final num distanceFromOrigin;

  Point(x, y)
      : x = x,
        y = y,
        distanceFromOrigin = sqrt(x * x + y * y);
}

main() {
  var p = new Point(3, 4);
  print(p.distanceFromOrigin);
}

我的代码

  Point(this.x, this.y)
      : distanceFromOrigin = sqrt(x * x + y * y);

两个输出都相同5。

问题

  • 如何正确使用构造函数和初始化列表?

开发环境

最诚挚的问候,

1 个答案:

答案 0 :(得分:2)

没有什么区别,除了可以利用不同类型的构造函数之外,结果将相同。

如果您不想公开在Point中定义的变量并将其标记为私有,那么初始化器将是一个不错的选择。

    class Point {
      final num _x;
      final num _y;
      final num _distanceFromOrigin;

      Point(x, y)
          : _x = x,
            _y = y,
            _distanceFromOrigin = sqrt(x * x + y * y);
    }

还要看看带有可选参数或工厂构造函数的构造函数。