飞镖私人财产

时间:2014-09-03 02:47:23

标签: dart private-members

有人说私有属性可用于更改类定义,而不会改变现有代码,具体取决于之前的类。

例如;

main() {
  var p1 = new Project();
  p1.name = 'Breeding';
  p1.description = 'Managing the breeding of animals';
  print('$p1');
  // prints: Project name: Breeding - Managing the breeding of animals
}

class Project {
  String name, description;

  toString() => 'Project name: $name - $description';
}

现在,类Project使用私有变量更改如下。

main() {
  var p1 = new Project();
  p1.name = 'Breeding';
  p1.description = 'Managing the breeding of animals';
  print('$p1');
  // prints: Project name: BREEDING - Managing the breeding of animals
  var p2 = new Project();
  p2.name = 'Project Breeding of all kinds of animals';
  print("We don't get here anymore because of the exception!");
}

class Project {
  String _name; // private variable
  String description;

  String get name => _name == null ? "" : _name.toUpperCase();
  set name(String prName) {
    if (prName.length > 20)
      throw 'Only 20 characters or less in project name';
    _name = prName;
  }

  toString() => 'Project name: $name - $description';
}

这是什么意思;

  

(由于引入了私有属性)main中已经存在的代码(或者通常是使用此属性的客户端代码)不需要更改

上述代码的作者(Learning Dart)表示,由于新插入的私有财产(_name),现有代码如' main()'不受Project类中属性更改的影响。

这是我无法理解的。如何在现有类中新插入的私有属性可以保持其他代码依赖于那些未触及或安全的类?

1 个答案:

答案 0 :(得分:1)

我仍然不知道你的实际问题是什么。

您可以使用私有字段,类和函数/方法来重新组织(重构)您的代码和
只要公共API不受影响且库的用户不依赖于类的内部行为,用户就不应该识别更改。
隐私主要是一种通信媒介,表示某些成员(公共)旨在被API用户访问,私有成员是API用户不应关心的实现细节。
不要将隐私与安全混淆。反思通常允许访问私人成员。

如果这不是您要找的答案,请添加评论或改进您的问题。