当前位置:  开发笔记 > 编程语言 > 正文

Google Dart方法和属性的可见性

如何解决《GoogleDart方法和属性的可见性》经验,为你挑选了1个好方法。

为了避免一些误解,我知道Google Dart处理库级别的事情,并且可以使用下划线前缀标识私有属性和方法.

这仍然是2017年的最新版本吗?是否有任何计划添加对象级可见性关键字,如:private,protected或public?

我不想随便做一些事情,但我对最佳实践很感兴趣.我的方式是:如果我不希望第一类看到第二类有什么,那么两者必须在不同的库中,那些库然后是更大的包的一部分.

libraries =类之间的隐私包=文件之间的隐私

隐私的细粒度控制怎么样?我的意思是也许有一件事我想私下.使用继承时使用可见性怎么样?我的意思是受保护的关键字非常有价值.

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

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;
  }
}

就目前而言,两个班级都可以做他们想做的事.



1> Günter Zöchb..:

Dart仍然只有图书馆级别的隐私.

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

分析器在静态分析期间提供了一些额外的功能,但在运行时会被忽略.

按照惯例,内部库也lib/src被视为私有库,现在应该从其他包中导入.该棉短绒,对于分析插件通知有关侵犯.似乎是分析仪本身的一部分.

该元包提供了由分析器支持的一些注解.

@protected 如果公共成员被来自不在子类中的其他库的代码引用,则会生成警告.

@visibleForTesting如果公共成员是由不在test目录中的代码(我假设的同一个包)引用,则会发出警告.不确定分析器是否实际警告了违规行为,否则计划这样做.

据我记得,有一些问题需要更多规则,但尚未实施.

来自@ lrn的评论如下

当前设计的一个原因是Dart允许动态调用,即使在强模式下也是如此.这意味着o.foo()在运行时不保留和检查额外信息的情况下,不能基于"类级隐私"拒绝.随着库/词法基于隐私,这是绝对清楚是否o.foo()还是o._foo()被允许的(它始终是,它只是后者只能参照_foo相同的库的名称).如果Dart只有标识符的静态解析,那么它可以使用静态信息(如private声明)在编译时拒绝而不会产生运行时开销.

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有