在学习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()}';
}
}
4条答案
按热度按时间qmelpv7a1#
私有属性是那些只能在声明它们的文件中访问的属性。换句话说,只有dart文件中的dart代码(在其中找到这些私有属性)“知道”私有属性。
考虑下面的例子
在
lib/foo.dart
中然后在
lib/bar.dart
中运行这两个文件将显示注解结果。但是如果
bar.dart
中的print(Foo()._foo);
行未注解,编译器将抛出一个错误,即getter '_foo'没有为类'Foo'定义。这是因为Foo
类上的_foo
属性对于foo.dart
文件是私有的。在Dart中,每个文件都是一个库。因此,将隐私或私有属性的范围限定在每个库中是有意义的。
要创建私有属性,无论是字段还是方法,只需在其名称前面加上下划线
_
。所以在编码时,如果您觉得其他dart文件(或库)不应该访问某些属性(可能是因为隔离逻辑),那么您可以将它们设置为私有(通过使用下划线
_
作为前缀)。w8ntj3qf2#
Dart隐私确实只是基于每个库。
wlwcrazw3#
我是这样理解的,我们来谈谈你的例子。
final String _title;
表示我们的标题是私有的。如果我们用下划线声明一个变量,我们不能改变它的属性。
让我们创建一个
OfficialName
对象并打印它。现在如果我们想改变这个对象的属性值,我们可以这样做
ofName.first= "new value"
但是,我们不能在这里更改_title
。我认为私有财产是不可变的。示例代码
有关详细信息,请访问language-tour
ohfgkhjo4#
下划线确定该标识符对外的可见性:
import和library指令可以帮助您创建模块化和可共享的代码库。库不仅提供API,而且是一个隐私单元:**以下划线(_)开头的标识符仅在库中可见。**每个Dart应用都是一个库,即使它不使用库指令。
来自dart文档