在 Dart 中使用固定参数初始化超级构造函数的最佳方法?

Best way to initialize super constructor with fix parameters in Dart?

我想在我的飞镖中初始化超级构造函数。我想要的代码是这样的:

class ChildClass extends ParentClass{
     ChildClass(){
         var startNumber = 4;
         var endNumber  = 8;
         super(startNumber, endNumber);
     }
}

但是,它不适用于飞镖代码。

备选方案 1:

class ChildClass extends ParentClass{
     ChildClass() : super(4,8);
}

备选方案 1 的问题在于它不是干净的代码。 4 和 8 是多少?

备选方案 2:

class ChildClass extends ParentClass{
     int sNumber = 4;
     int eNumber = 8;

     ChildClass() : super(sNumber, eNumber);
}

备选方案 2 的问题是字段 sNumbereNumber 是多余的,因为我们可以使用 ParentClass 中的 startNumberendNumber 如果字段是 public

选项 3:

class ChildClass extends ParentClass{
     ChildClass({Int startNumber = 4, int endNumber = 8}) : super(startNumber, endNumber);
}

备选方案 3 的问题在于我们可以更改参数 startNumberendNumber

的值

如何在明确传递值的含义的同时调用超级构造函数?

使用备选方案 2 并将字段设为私有并且 const:

class ChildClass extends ParentClass{
     static const int _sNumber = 4;
     static const int _eNumber = 8;

     ChildClass() : super(_sNumber, _eNumber);
}

最终你的问题来自想要使 ParentClass 的构造函数参数更清晰。因此,理想情况下,您应该使 ParentClass 的构造函数采用命名参数:

class ParentClass {
  int startNumber;
  int endNumber;

  ParentClass({required this.startNumber, required this.endNumber});
}

class ChildClass {
  ChildClass() : super(startNumber: 4, endNumber: 8);
}

如果您无法控制 ParentClass,那么另一种选择是在 ChildClass 中使用带有私有构造函数的命名参数:

class ChildClass {
  ChildClass() : this._internal(startNumber: 4, endNumber: 8);

  ChildClass._internal({required int startNumber, required int endNumber})
    : super(startNumber, endNumber);
}