gpt4 book ai didi

dart - Google Dart 对方法和属性的可见性

转载 作者:行者123 更新时间:2023-12-04 17:31:54 27 4
gpt4 key购买 nike

只是为了避免一些误解,我知道 Google Dart 在库级别处理事情,私有(private)属性和方法可以用下划线前缀标识。

截至 2017 年,这仍然是最新的吗?是否有任何添加对象级别可见性关键字的计划,例如:私有(private)、 protected 或公共(public)?

我不只是想做一些随机的事情,而且我对最佳实践很感兴趣。我的看法是:如果我不想让第一类看到第二类有什么,那么两者都必须在不同的库中,那么这些库就是更大包的一部分。

图书馆=类(class)之间的隐私
包=文件之间的隐私

对隐私的细粒度控制呢?我的意思是也许有一件我想要私有(private)的东西。使用继承时如何使用可见性?我的意思是 protected 关键字可能非常有值(value)。

这是一个文件中的一个小例子:

class one {
int n = 1;

one() {
var test = new two(n);
print(test.showNumber());
}
}

class two {
int n = 2;

two(n) {
this.n += n;
}

int showNumber() {
return n;
}
}

就目前而言,两个类(class)都可以做他们想做的事。

最佳答案

Dart 仍然只有库级别的隐私。

标识符以下划线开头的库级隐私也在运行时强制执行。

分析器在静态分析期间提供了一些附加功能,但在运行时会被忽略。

根据惯例,lib/src 中的库也有。被认为是私有(private)的,现在应该从其他包中导入。 linter ,分析器的插件会通知违规行为。似乎是分析仪本身的一部分。

meta package 提供了一些分析器支持的注解。

  • @protected如果公共(public)成员被不在子类中的其他库的代码引用,则会产生警告。
  • @visibleForTesting如果公共(public)成员被不在 test 中的代码引用,则产生警告。目录(我假设的同一个包)不确定分析器是否真的警告违规行为,否则计划这样做。

  • 据我记得,还有一些关于更多规则的问题,但尚未实现。

    来自@lrn 下面的评论

    One reason for the current design is that Dart allows dynamic calls, even in strong mode. That means that o.foo() cannot be rejected based on "class level privacy" without retaining and checking extra information at runtime. With library/lexical based privacy, it's absolutely clear whether o.foo() or o._foo() is allowed (it always is, it's just that the latter can only refer to the _foo name of the same library). If Dart only had static resolution of identifiers, then it could use static information (like a private declaration) to reject at compile time without a runtime overhead.

    关于dart - Google Dart 对方法和属性的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41760323/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com