使用构造函数“ className()和className ._()之间的区别
问题内容:
我有两种编写构造器的方法。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()
:这是一个 命名 构造函数。也许您希望您的类具有多个构造函数,以便可以用不同的方式构造您的类的实例。Dart不支持重载函数,因此,如果需要多个构造函数,则它们需要不同的名称。因此,如果您需要多个构造函数,则需要命名其中一些以区分它们。即使您没有多个构造函数,您也可能想要一个显式名称以避免歧义。MyClass._private()
:在Dart中,以下划线开头的名称是 私有的 (通常是文件名)。MyClass._private()
只是一个命名的构造函数,不能在其定义的源文件之外使用。通常,当类想要强制调用者使用公共工厂构造函数(或静态方法)来获取实例时,您会看到私有构造函数,尤其是当类希望有一个实例。MyClass._()
:等同于MyClass._private()
。它 不是 默认的构造函数,而是一个私有的命名构造函数(即,调用者必须使用MyClass._()
它来调用它)。在这种情况下,类作者想要一个私有构造函数,但又不想选择一个名称。(命名很难。)