我该如何(习惯上)正确地使用飞镖私人会员?

时间:2019-06-03 00:53:03

标签: oop dart

我才刚刚开始学习飞镖编程语言。

我偶然发现的事情是进行访问修饰符(如public / private)的较不常规的方式(至少与我对C#,Java和C ++的经验相比)。

据我了解,在成员变量前加上_字符将使该lib(文件)私有。

那么,将单个类强制实施到单个文件/ lib,以强制执行类似于类级别public / private的行为,是否是常见的做法?

这还会导致一个类的所有后代必须位于同一类中。

如果这不是常见做法,那么您如何精确地在飞镖中进行OOP?您如何在Dart中实现OOP概念,例如封装和合成?

2 个答案:

答案 0 :(得分:2)

Dart中没有“私人类”,只有“图书馆私人”。

基础设计基于这样一个思想:单个库就是一个实体,由具有相同目标的同一个人创建和编辑。您无需为自己的合著者辩护。毕竟,如果您尝试向合著者隐藏某些东西,他们可以只更改您的班级以使其公开。因此,完整的库是访问管理的粒度。

创建多个小型库很容易,因此您可以使一个库仅包含实际相关的内容。如果这样做,那么就不必再阻止对象之间的访问,因为它们应该一起设计,所以访问可能是有意的。

库也是实现的粒度。一个库公开其公共接口,但是实现细节是(库)私有的,因此更改实现细节不应破坏其他库。这样可以安全地更改实现;只要您仅更改私人物品,就保证没有其他库会损坏。

也就是说,私有成员可以看作是实施细节。如果您需要访问另一个类的实现,而不仅是它的公共接口,那么您就深深地依赖于该实现,并且代码应该位于同一个库中。

只有很少的相关和相互依存的类,有时甚至是一个类的图书馆才是前进的道路,也是人们通常要做的事情。 然后,如果您希望包库公开很多类,则可以导出这些单独的库。

对于类的后代:Dart没有受保护的访问限制,因此,如果子类需要访问某些内容,则它必须是公共的,或位于同一文件中。有一些棘手的解决方法,但对于这两种方法之一通常更简单。同样,如果另一个类需要访问非公开的内容,则它与实现相关,并且应与该实现保持紧密联系。

封装意味着阻止访问实现细节。您可以在库级别执行此操作。在图书馆内部,仅做您打算做的事情是您自己的责任。合成的工作方式与其他任何OO语言相同。

答案 1 :(得分:-1)

来自Dart文档:

Unlike Java, Dart doesn’t have the keywords public, protected, and private. 
If an identifier starts with an underscore _, it’s private to its library.

库不仅提供API,而且是隐私的单位:以下划线_开头的标识符仅在库内部可见。

answer可能会对您有所帮助。