【问题标题】:Dart/Flutter - access private members of mixin or in derived classDart/Flutter - 访问 mixin 或派生类的私有成员
【发布时间】:2021-07-01 01:41:41
【问题描述】:

我想将多余的类成员外包给一个单独的类/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,
    String lastName,
  }) :
        _firstName = 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;
  
}

【问题讨论】:

    标签: class dart private mixins getter-setter


    【解决方案1】:

    这与私人成员无关。 Dart 初始化器列表只能初始化 that 类的成员,而不是来自任何基类(包括 mixins)。 (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,
        String lastName,
      }) {
        _firstName = firstName;
        _lastName = lastName;
      }
    
      ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-17
      • 2011-08-16
      相关资源
      最近更新 更多