当我们说它自己的库的私有实例变量时,这是什么意思?
What does it mean , when we say private instance variable for its own library?
我是 flutter/dart 的新手,我读过 我们没有 public/private/protected dart 的访问说明符,但如果我们想创建私有实例变量,我们可以使用 下划线 (_) 运算符,但它不会使变量对 class 私有,而是对 它自己的库 ,那么它到底是什么意思呢?
a library/module/model 指的是 class 本身,因此任何 variables/methods 只能访问 class 本身。任何来自外部世界的 class 试图访问此 属性,都将无法访问。基本上 它自己的库 意味着 class 本身
Dart 隐私确实仅基于每个库。
以_
开头的名称是库私有名称。私有标识符,如 _tmp
,被认为是不同于 name 的 name 与出现在不同库中的类似拼写标识符 _tmp
。
这意味着不同库中的代码无法访问私有名称 _tmp
,因为它甚至无法表达它。如果它试图写 _tmp
,它只能引用它自己的库的私有名称。
当您记得 Dart 具有 动态调用 时,选择在 name 中嵌入访问控制是有意义的。如果你写 dynamic x = ...; x.foo();
,那么如果有的话,这应该调用 x
的 foo
方法。为了有效地做到这一点,如果每个动态调用还应该弄清楚名称的来源以及调用者是否可以访问它,那么开销就会太大。 Dart 通过使所有 public 名称可见,以及所有私有名称 inexpressible.
来避免这种开销
隐私的目标是将 public 接口 API 与内部实现 API 分开,并避免命名冲突。
您可以写下您的私人名字,而不必担心它们会与其他人的名字冲突,也不会冒着有人认为它们是供 public 使用的风险。
Dart 不会尝试保护代码免受同一库中其他代码的影响。无论如何都应该是同一作者,因此可以信任他们负责任地使用 API(如果不是,则由他们自己承担)。
对于用户而言,这意味着:库是代码单元。您可以创建仅包含一个 class 的库。图书馆的隐私是 class class 的隐私。或者您可以创建包含许多 classes 和顶级函数的库,它们都可以看到彼此的私有名称。
这意味着您的模块化应该基于 classes 共享实现的需要,而不是其他任何东西。您始终可以通过导出其他库来构建更大的 API。
创建 Pub 包时,我会在 lib/src/
目录中创建您自己的内部库,给它们任何大小方便,然后导出您的 public API 来自 lib/
.
中的包主文件
我是 flutter/dart 的新手,我读过 我们没有 public/private/protected dart 的访问说明符,但如果我们想创建私有实例变量,我们可以使用 下划线 (_) 运算符,但它不会使变量对 class 私有,而是对 它自己的库 ,那么它到底是什么意思呢?
a library/module/model 指的是 class 本身,因此任何 variables/methods 只能访问 class 本身。任何来自外部世界的 class 试图访问此 属性,都将无法访问。基本上 它自己的库 意味着 class 本身
Dart 隐私确实仅基于每个库。
以_
开头的名称是库私有名称。私有标识符,如 _tmp
,被认为是不同于 name 的 name 与出现在不同库中的类似拼写标识符 _tmp
。
这意味着不同库中的代码无法访问私有名称 _tmp
,因为它甚至无法表达它。如果它试图写 _tmp
,它只能引用它自己的库的私有名称。
当您记得 Dart 具有 动态调用 时,选择在 name 中嵌入访问控制是有意义的。如果你写 dynamic x = ...; x.foo();
,那么如果有的话,这应该调用 x
的 foo
方法。为了有效地做到这一点,如果每个动态调用还应该弄清楚名称的来源以及调用者是否可以访问它,那么开销就会太大。 Dart 通过使所有 public 名称可见,以及所有私有名称 inexpressible.
隐私的目标是将 public 接口 API 与内部实现 API 分开,并避免命名冲突。 您可以写下您的私人名字,而不必担心它们会与其他人的名字冲突,也不会冒着有人认为它们是供 public 使用的风险。 Dart 不会尝试保护代码免受同一库中其他代码的影响。无论如何都应该是同一作者,因此可以信任他们负责任地使用 API(如果不是,则由他们自己承担)。
对于用户而言,这意味着:库是代码单元。您可以创建仅包含一个 class 的库。图书馆的隐私是 class class 的隐私。或者您可以创建包含许多 classes 和顶级函数的库,它们都可以看到彼此的私有名称。
这意味着您的模块化应该基于 classes 共享实现的需要,而不是其他任何东西。您始终可以通过导出其他库来构建更大的 API。
创建 Pub 包时,我会在 lib/src/
目录中创建您自己的内部库,给它们任何大小方便,然后导出您的 public API 来自 lib/
.