顶层变量和类变量一起被称为静态变量。他们的区别在于作用域,即在什么范围内能够通过名称对它们进行访问。类变量的作用域被限制在声明它们的类中(甚至子类也无法访问它们),顶层变量(也被称为库变量)的作用域覆盖了声明它们的整个库。库作用域通常由多个类与函数构成。

顶层函数(常被称作库方法)的作用域规则与顶层变量一样,在整个库中都是可用的,它可以是普通函数、gettersetter

库是Dart的基础封装单元,以_开头的成员都是库私有的。

在Dart中类声明都是顶层的,因为Dart不支持嵌套类。

Dart的导入语句适用于任意URI。库内可用的对象包含了库本身所声明的对象以及通过导入语句从其他库导入的对象。dart:core中定义的对象是隐含导入的。

Dart提供了额外的机制来控制导入到库内的对象:命名空间组合器show和hide。

Dart允许你把库拆分成较小的被称为part的组件。每个子系统都存放在各自的文件中,而库通过使用part指令来引用他们。每个part指令都给定了一个指向part所在位置的URI。这些URI与导入语句遵循同样的规则。所有part都共享同一个作用域,即引用它们的库的内部命名空间,而且包含所有导入。part是结构化的,每个part都必须以一个part头来指定它属于哪一个库。

export 'inspecting.dart' show ObjectInspector

有时,需要推迟库的加载。Dart使用延迟加载来支持这种场景。import 'rarelyUsed.dart' deferred as rarelyUsed,在开发时编译器仍然会把导入的对象导入到当前的作用域中,但在运行时尝试访问这些对象时则会导致动态错误,除非它们被显式地加载。延迟加载的导入必须提供前缀,且前缀不能被库中的其他导入使用。违反这些规则将会导致编译错误。当真正需要使用延迟加载的库时,可以调用loadLibrary()方法。rarelyUsed.loadLibrary().then(onLoad)onLoad的定义如下onLoad(loadSucceeded) => loadSucceeded ? doStuff() : makeExecuses();,对loadLibrary()的调用是异步的,它启动了库的加载,但会立即返回而不等待库加载完成。loadLibrary()的结果是一个future,它是某个值的占位符且该值在一段时间后才可用。future支持一个then()方法,该方法的参数是一个用于接收值的回调函数。但future代表的值最终可用时,该回调函数将被调用,并传入真正的值。

在确定库加载完成之前,要避免访问rarelyUsed,如果在库加载完成之前访问它,会得到一个运行时错误。

Dart程序由库组成。库聚合类(类型)、函数和变量。Dart的库是针对隐私而不是安全性的封装单元。Dart程序的执行总是从脚本的main()函数开始的。一个库能被拆分成多个part。Dart库通过导入来接入他们自身的依赖,并能通过执行命名空间组合器来选择性地导入其他库的对象,也能够通过添加前缀来区分各个导入。库通过命名空间组合器也能将其他库或自身的部分内容重新导出。库可以延迟到运行时才加载,以改善启动时间或减少不必要的使用。

results matching ""

    No results matching ""