问题描述
我想将多余的类成员外包到一个单独的类/mixin 中。对于使用该类/mixin 的每个类,我想单独决定成员是否可以从外部获取和/或设置。
我想要像下面的例子那样的东西,但它不能编译,似乎是因为私有属性在通过 with
派生或添加到类时不可见。
mixin Person {
String _firstName;
String _lastName;
}
class Butcher with Person {
Butcher({
String firstName,String lastName,}) :
_firstName = firstName,_lastName = lastName;
final String tool = 'knife';
String get firstName => _firstName;
String get lastName => _lastName;
}
class SecretAgent with Person {
SecretAgent({
String firstName,_lastName = lastName;
final String tool = 'poison';
String get firstName => _firstName;
String get lastName => _lastName;
set firstName(String value) => _firstName = value;
set lastName(String value) => _lastName = value;
}
解决方法
这与私有成员无关。 Dart 初始化列表只能初始化 那个 类的成员,不能初始化任何基类(包括 mixin)。 (Member initialization from initializer list executes before base class constructors.)
如果您将初始化移动到构造函数体,它应该可以工作:
class Butcher with Person {
Butcher({
String firstName,String lastName,}) {
_firstName = firstName;
_lastName = lastName;
}
...
class SecretAgent with Person {
SecretAgent({
String firstName,}) {
_firstName = firstName;
_lastName = lastName;
}
...