了解 Dart 私人课程

mFe*_*ein 10 dart flutter

在 Flutter 中,我们通常有这样的事情:

class MyStatefulWidget extends StatefulWidget {
  @override
  _MyState createState() => _MyState();
}

class _MyState extends State<MyStatefulWidget> {
  void doSomething() => print('hi');

  @override
  Widget build(BuildContext context) {
    return Container();
  }
}
Run Code Online (Sandbox Code Playgroud)

So_MyState是用 a 声明的_,这使它成为库私有的。

那么,_MySate如果Flutter 渲染引擎被认为是私有的,那么它为什么可以使用呢?

这很有趣,因为我可以doSomething()从其他文件访问,但是如果我成功了_doSomething(),我就不能再访问它了……那么为什么我可以从私有类访问公共方法,但无法从私有类访问私有方法私人课程?

Rém*_*let 9

虽然_MyState是私人的,StatefulWidgetState不是。

框架不操纵_MyState,它操纵这些他有权访问的较低层,具有明确定义的原型。

这基本上总结为:

StatefulWidget widget;
State foo = widget.createState();

foo.initState();
final newWidget = foo.build(this);
...
Run Code Online (Sandbox Code Playgroud)

  • 哦,但是如果它的内容可以被其他文件使用,那么拥有一个私有类有什么意义呢?(据我所知,每个文件都是一个库)......我想我的结论是私有类下的所有东西都是私有的,甚至是它的实例化 (4认同)