首页 > 解决方案 > Dart:实例变量在私有类中应该是私有的还是公共的?

问题描述

例如:

class _Foo {
    String _var1;
    String var2;
}

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

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

标签: dart

解决方案


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

认为

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 用户隐藏(内部状态),则将该字段设为私有。


推荐阅读