在Dart中使用库时,我并不完全理解part
/ part of
和import
/ export
之间的区别。例如:
one.dart:
library one;
part "two.dart";
Class One {
};
和
two.dart:
part of one;
import 'somefile.dart';
Class Two {
}
与
library one;
import 'two.dart';
Class One {
}
和
library two;
import 'somefile.dart';
export 'somefile.dart';
Class Two {
}
两种情况似乎都做同样的事情。何时使用part
和part of
而不是import
是否有利?是否存在import
不起作用的情况,但part
和part of
会不会有效?
答案 0 :(得分:22)
更新2018/03
part
和part of
最近越来越多地用于代码生成方案(而非被弃用的变换器),并且不太可能很快消失。
built_value
,json_serializable
等许多其他软件包都依赖于它。
气馁只是通过让一个库文件和所有其他文件成为该库的一部分而将包的所有文件绑定到单个库的模式。
<强>原始强>
在Dart中,私人成员可以在同一个库中访问。使用import
导入库并且只能访问其公共成员。使用part
/ part of
,您可以将一个库拆分为多个文件,并且可以访问这些文件中所有代码的私有成员。
请参阅上述更新中以下段落的说明
不鼓励使用part
/ part of
,Dart团队正在考虑摆脱它。我假设他们会介绍类似“朋友”(https://github.com/dart-lang/sdk/issues/22841)的内容,其中两个图书馆可以在他们停止part
/ part of
之前访问彼此的私人成员(可能在未来的Dart中)版本)。
答案 1 :(得分:7)
dartlang.org网站上的Creating Library Packages文章建议避免使用part
/ part of
。
注意:您可能听说过part指令,允许您这样做 将库拆分为多个Dart文件。我们建议您避免 使用part并创建迷你库。
迷你图书馆&#39;引用的是src
中的小型库dart文件,它们被导入主库并从主库中导出。
答案 2 :(得分:5)
假设我们有一个名为mylib
的Dart 库,其文件为lib/mylib.dart
。
library mylib;
// Definitions
该库可以作为
包含在main.dart
文件中
import 'package:mypackage/mylib.dart';
当您创建新库并使用其他库时,您希望在使用包时自动使用这些库,然后使用export
:
library mylib;
export 'otherlib.dart';
// Definitions
您可以使用show
关键字仅导入/导出库的某些部分(如类或其他内容)。
您在此处使用part of
指令错误。您不能同时使用library
和part of
,它们用于指定属于库的内容。例如,您可以将库文件拆分为多个文件(部分):
假设我们在文件mylib.dart
:
library mylib;
part 'src/class1.part';
// More parts
然后我们在另一个文件src/class1.part
中有mylib.dart
part of mylib;
class Class1 {
/* ... */
}
答案 3 :(得分:0)
使用 part/part of
使许多文件被视为一个文件
import/export
没有,因此当需要从另一个文件(在其他文件上创建的类)访问私有字段时,这可能很有用