首页 > 解决方案 > 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()}';
 }
}

标签: flutterdart

解决方案


私有属性是那些只能在声明它们的文件中访问的属性。换句话说,只有 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 文件(或库)不应该访问的属性(可能是因为隔离逻辑),那么您可以将它们设为私有(通过前缀下划线_)。


推荐阅读