当我们说私有实例变量用于它自己的库时,这意味着什么



我是flutter/dart的初学者,并读到我们没有用于dart的public/private/protected访问说明符,但如果我们想使私有实例变量成为私有实例变量,我们可以使用下划线(_(运算符,但它不会使变量成为类的私有变量,而是使变量成为自己的库的私有变量,那么它的实际含义是什么?

Dart隐私实际上只是基于每个库。

_开头的名称是库专用名称。与出现在不同库中的拼写相似的标识符(也称为_tmp(相比,私有标识符(如_tmp(被视为不同的名称

这意味着其他库中的代码无法访问私有名称_tmp,因为它甚至无法表达它。如果它试图写入_tmp,它只能引用自己库的私有名称。

当您记得Dart有动态调用时,选择在名称中嵌入访问控制是有意义的。如果您编写dynamic x = ...; x.foo();,那么它应该调用xfoo方法(如果有(。为了有效地做到这一点,如果每个动态调用都应该弄清楚名称最初来自哪里以及调用方是否可以访问它,那么这将是一个太大的开销。Dart通过使所有公共名称可见,而所有私有名称不可表达来避免这种开销。

隐私的目标是将公共接口API与内部实现API分离,并避免命名冲突。你可以写下你的私人名字,而不用担心它们与他人的名字冲突,也不用担心别人认为它们是供公众使用的。Dart不会试图保护代码不受同一库中其他代码的影响。无论如何,它应该是同一个作者,所以可以信任他们负责任地使用API(如果不是,那就要靠他们自己了(。

它对用户来说意味着:库是代码的单位。您可以创建只包含单个类的库。库隐私是该类的类隐私。或者,您可以创建具有许多类和顶级函数的库,这些类和函数都可以查看彼此的私有名称。

这意味着您应该将模块化建立在类共享实现的需求之上,而不是真正的其他需求。您总是可以通过导出其他库来构建更大的API。

创建Pub包时,我会在lib/src/目录中创建您自己的内部库,为它们提供任何大小的方便,然后从lib/中的包主文件导出公共API。

库/模块/模型引用类本身,因此任何变量/方法都只能访问类本身。来自外部世界的任何试图访问此属性的类都将无法访问。基本上它自己的库意味着类本身

相关内容

  • 没有找到相关文章

最新更新