如何为Dart类创建命名空间?我来自一个只使用namespace SampleNamespace { }的C#背景。
您如何在Dart中实现相同的目标?
发布于 2012-12-14 21:38:03
Dart没有名称空间的概念,而是具有库。您可以认为一个库在某种程度上等同于一个名称空间,因为一个库可以由多个文件组成,并包含多个类和函数。
Dart中的隐私也在库中,而不是类级别(任何以下划线为前缀的内容都是该库的隐私)。
定义库的示例(使用实用程序库的示例:
// utilities.dart
library utilities; // being the first statement in the library file您可以使用part关键字使其他文件成为同一个库的一部分。零件文件仅用于帮助组织代码;您可以将所有类放在单个库文件中,或将它们拆分到多个零件文件(或零件文件和库文件)中-这对执行没有任何影响。将主库文件放在父文件夹中,将零件文件放在src/文件夹中是很有风格的。
展开示例以显示零件文件。
// utilities.dart
library utilities;
part "src/string_utils.dart";
part "src/date_utils.dart";然后,使用part of语句将这些零件文件链接回它们所属的库:
// src/string_utils.dart
part of utilities;
// functions and classes
String reverseString(s) => // implementation ....
String _stringBuilder(strings) => // a private (to the library) function,
// indicated by the leading underscore
//... snip other classes and functions现在您有了一个包含函数的库,您可以通过在库中执行import来在其他地方使用该库:
// my_app.dart;
import "path/to/library/utilities.dart";
main() {
var reversed = reverseString("Foo");
// _stringBulider(["a","b"]); // won't work - this function is
// only visible inside the library
}如果要为库设置别名以避免冲突(其中可能导入两个库,每个库都包含reverseString()函数),请使用as关键字:
// my_app.dart;
import "path/to/library/utilities.dart";
import "some/other/utilities.dart" as your_utils;
main() {
var reversed = reverseString("Foo");
var your_reversed_string = your_utils.reverseString("Bar");
}import语句还使用由Dart的包管理器pub导入的包,因此您还可以在github或其他地方托管库,并按如下方式引用您的库:
// my_app.dart;
import "package:utilities/utilities.dart";
main() {
var reversed = reverseString("Foo");
}pub依赖关系是在pubspec.yaml文件中定义的,该文件告诉pub在哪里可以找到库。你可以在pub.dartlang.org上找到更多信息
需要注意的是,只有库文件才能:
import语句。零件文件cannot.library关键字。零件文件cannot.part文件。零件文件不能。最后一点是,可运行的应用程序文件可以(并且很可能是)库文件,也可以由部件文件组成
// my_app.dart;
library my_app;
import "package:utilities/utilities.dart";
part "src/edit_ui.dart";
part "src/list_ui.dart";
part "src/foo.dart";
main() {
var reversed = reverseString("Foo");
showEditUi(); // perhaps defined in edit_ui.dart....?
}https://stackoverflow.com/questions/13876879
复制相似问题