flutter - Dart 中的“私有财产”是什么?
问题描述
在学习 Dart 时,我注意到私有属性以下划线开头。那么私有属性是什么意思呢?
class OfficialName extends Name {
// Private properties begin with an underscore
final String _title;
OfficialName(this._title, String first, String last)
: super (first, last);
@override
String toString(){
return 'S_title. ${super.toString()}';
}
}
解决方案
私有属性是那些只能在声明它们的文件中访问的属性。换句话说,只有 dart 文件中的 dart 代码(在这些私有属性所在的位置)“知道”这些私有属性。
考虑以下示例
在lib/foo.dart
class Foo {
var _foo = 'foo';
var bar = 'bar';
}
main() {
print(Foo()._foo); // foo
print(Foo().bar); // bar
}
然后在lib/bar.dart
import './foo.dart';
main() => {
// print(Foo()._foo); // this won't work
print(Foo().bar); // bar
}
运行这两个文件将显示注释结果。但是如果在print(Foo()._foo);
中取消注释该行bar.dart
,编译器将抛出一个错误,即没有为类 'Foo' 定义 getter '_foo'。这是因为类的_foo
属性Foo
是文件私有的foo.dart
。
在 Dart 中,每个文件都是一个库。因此,隐私或私有属性的范围仅限于每个库是有道理的。
要创建私有属性,无论是字段还是方法,只需在其名称前加上下划线即可_
。
因此,在编码时,如果您认为其他 dart 文件(或库)不应该访问的属性(可能是因为隔离逻辑),那么您可以将它们设为私有(通过前缀下划线_
)。
推荐阅读
- android - 如何在 XML Layout 中创建多个进度条?
- bash - 使用bash根据文件夹名称重命名目录中的文件
- sql - 如何在查询中创建一个新列,然后用一个简单的 calc X*Y 填充
- javascript - Python3在Jenkins上更新html页面和iFrame
- python - BeautifulSoup4 返回错误的 HTML?
- javascript - 在 JavaScript/JQuery 中解析 JSON 对象
- laravel - 为什么我的错误消息没有在 Laravel 中显示
- php - 未转换为 json 的实体列表,而是我得到一个空对象数组
- apache-nifi - 如何在 nifi 中启用自定义处理器的站点到站点来源报告?
- apache-spark - 任务如何在 spark 引擎(称为 DAG)中执行?