【问题标题】:access to private attribute in abstract class dart访问抽象类 dart 中的私有属性
【发布时间】:2020-08-31 11:54:00
【问题描述】:

我需要访问 Flutter SDK 中抽象类中的私有属性。我将我的问题简化为这种情况:

abstract class Person{
  final String _name = "Testing...";
}

class Employee extends Person{
  String get name =>_name;
}

main(){
  var emp = new Employee();
  print(emp.name);
}

如果我将 Person 类和 Employee 类放在同一个 .dart 文件中,我可以从 Employee 访问 Person 中的私有属性 _name,但是如果我将 Person 类移动到另一个 .dart 文件中,我就不能这样做了.

dart 文档说:如果标识符以下划线 _ 开头,则它是其库私有的。库不仅提供 API,而且是一个隐私单元:以下划线 _ 开头的标识符仅在库中可见。

当它们在不同的文件中时,如何使它们属于同一个库?

【问题讨论】:

    标签: dart


    【解决方案1】:

    目前没有很好的文档记录,但如果您有两个 .dart 文件属于同一个库,则可以使用 librarypartpart of。您将有一个 .dart 文件作为您的库的入口点:

    foo.dart:

    library library_name;
    part 'bar.dart';
    

    bar.dart:

    part of library_name;
    ...
    

    然后消费者通过import 'foo.dart'; 导入整个库。

    Flutter SDK 使用了它,示例可以参考它的源代码。

    【讨论】:

      【解决方案2】:

      我认为 Person 类中的 _name 成员应该在没有 _ 的情况下受到保护和命名。我认为这种实现是错误的,因为它们都应该打包在同一个库/文件中。所以你可以改变你的班级结构!对不起,如果这不是你的答案:(

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-10
        • 2023-03-03
        • 2013-09-18
        • 2014-10-11
        • 2011-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多