我有这两种方法来编写构造函数。
className()
和 className._()
它们之间有什么区别,什么时候应该使用哪个?
class GlobalState{
final Map<dynamic,dynamic> _data=<dynamic,dynamic>{};
static GlobalState instance = new GlobalState._();
GlobalState._();
}
//In Main Class
GlobalState _store=GlobalState.instance;
and
class GlobalState{
final Map<dynamic,dynamic> _data=<dynamic,dynamic>{};
static GlobalState instance = new GlobalState();
}
//In Main Class
GlobalState _store=GlobalState();
考虑一下,例如:
class MyClass {
MyClass();
MyClass.named();
MyClass._private();
MyClass._();
}
上面的类有四个构造函数:
MyClass()
:这是默认,未命名的构造函数。当您设计类时,您希望这表明它是人们在大多数情况下应该使用的构造函数。使用它更方便,因为它需要更少的打字。
MyClass.named()
named构造函数。也许您希望您的类具有多个构造函数,以便可以以不同的方式构造您的类的实例。 Dart 不支持重载函数,因此如果需要多个构造函数,则需要使用不同的名称来区分它们。即使您没有多个构造函数,在某些情况下您也可能需要一个显式名称,以避免其所采用的位置参数含糊不清(例如
Rectangle.fromLTRB
)。MyClass._private()
private(通常表示
.dart
文件)。 MyClass._private()
只是一个命名构造函数,不能在库外部使用。常见的用途是当类:
想要强制调用者使用MyClass._()
MyClass._private()
相同,但名称不同。它不是默认构造函数,它仍然是私有的命名构造函数(即调用者必须使用 MyClass._()
来调用它)。在这种情况下,类作者想要一个私有构造函数,但不想选择一个名称。 (命名事物很难。)
唯一的区别是一个是公共/普通构造函数,另一个是私有构造函数。