在 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 的问题是字段 sNumber
和 eNumber
是多余的,因为我们可以使用 ParentClass
中的 startNumber
和 endNumber
如果字段是 public
选项 3:
class ChildClass extends ParentClass{
ChildClass({Int startNumber = 4, int endNumber = 8}) : super(startNumber, endNumber);
}
备选方案 3 的问题在于我们可以更改参数 startNumber
和 endNumber
的值
如何在明确传递值的含义的同时调用超级构造函数?
使用备选方案 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);
}
我想在我的飞镖中初始化超级构造函数。我想要的代码是这样的:
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 的问题是字段 sNumber
和 eNumber
是多余的,因为我们可以使用 ParentClass
中的 startNumber
和 endNumber
如果字段是 public
选项 3:
class ChildClass extends ParentClass{
ChildClass({Int startNumber = 4, int endNumber = 8}) : super(startNumber, endNumber);
}
备选方案 3 的问题在于我们可以更改参数 startNumber
和 endNumber
如何在明确传递值的含义的同时调用超级构造函数?
使用备选方案 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);
}