例如:

class _Foo {
    String _var1;
    String var2;
}

我总是使用公共变量var2,因为我认为在类已经是私有的情况下使用私有变量是没有意义的,因为你无论如何都不能访问私有类.

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

推荐答案

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

假定

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

Dart相关问答推荐

Dart:判断泛型函数的类型 T

对字母数字字符串数组进行排序

Task 'app:processDebugResources'的Flutter执行失败

如何防止意外发布私有 pub 包

SliverList / SliverChildBuilderDelegate 提供初始索引或允许负索引

如何使用Flutter在按钮网格中滑动(swipe)/拖动(drag) 2 个或更多按钮

Flutter:将照片或图像显示为模态弹出窗口

如何调整ShowDialog的子级大小

在 Flutter 中将图像与左上角对齐

如何在 Flutter 中使用 Provider 显示来自 ChangeNotifier 的错误

在Flutter 中使用 import 'dart:html' - 我需要额外的依赖项吗?

Dart 中 http 和 HttpClient 的区别

dart 如何创建、监听和发出自定义事件?

如何用dart语言初始化超类变量?

用默认值初始化成员的最优雅的方法

Cancel stream onData

比较在 Dart 中创建单例的方法

学习 Dart 好还是我必须使用基本的 javascript?

从 Dart 应用访问 pubspec.yaml 属性

在 Dart 中验证邮箱地址?