Dart:实例变量是私有类还是私有类中的公共变量?

时间:2018-11-27 07:57:48

标签: dart

例如:

class _Foo {
    String _var1;
    String var2;
}

我总是使用公共变量var2,因为我认为在类已经是私有的时候创建私有变量是没有意义的,因为无论如何您都无法访问私有类。

但是我发现很多人使用私有变量_var1。这只是个人喜好吗?当类是私有的时,私有实例变量的意义何在?如果您不能访问私有类,则无论它们是否是私有的,您都无法访问其所有实例变量。如果可以在同一库中访问私有类,则可以访问其所有实例变量,无论它们是否是私有的。

1 个答案:

答案 0 :(得分:4)

将类设为私有不会将其成员设为私有,也不会使该类的实例不可访问。

假设

lib/private_class.dart

class Foo {
  final _PrivateClass privateClass = _PrivateClass();
}

class _PrivateClass {
  String publicFoo = 'foo';
  String _privateBar = 'bar';
}

bin/main.dart

import 'package:so_53495089_private_field_in_private_class/private_class.dart';

main(List<String> arguments) {
  final foo = Foo();
  print(foo.privateClass.publicFoo);
//  print(foo.privateClass._privateBar); // invalid because of ._privateBar
}

您不能声明私有类类型的变量或参数,也不能在另一个库中扩展或实现该类或创建该类的实例, 但是否则没有太大区别。

因此,如果该字段应该对API用户隐藏(内部状态),则将该字段设为私有。