一尘不染

使用构造函数“ className()和className ._()之间的区别

flutter

我有两种编写构造器的方法。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();

阅读 257

收藏
2020-08-13

共1个答案

一尘不染

例如:

class MyClass {
  MyClass();

  MyClass.named();

  MyClass._private();

  MyClass._();
}

上面的类有四个构造函数:

  • MyClass():这是 默认的 未命名构造函数。在设计类时,您希望它表示人们 大多数 时候应该使用的构造函数。使用它更方便,因为它涉及较少的键入。
  • MyClass.named():这是一个 命名 构造函数。也许您希望您的类具有多个构造函数,以便可以用不同的方式构造您的类的实例。Dart不支持重载函数,因此,如果需要多个构造函数,则它们需要不同的名称。因此,如果您需要多个构造函数,则需要命名其中一些以区分它们。即使您没有多个构造函数,您也可能想要一个显式名称以避免歧义。
  • MyClass._private():在Dart中,以下划线开头的名称是 私有的 (通常是文件名)。MyClass._private()只是一个命名的构造函数,不能在其定义的源文件之外使用。通常,当类想要强制调用者使用公共工厂构造函数(或静态方法)来获取实例时,您会看到私有构造函数,尤其是当类希望有一个实例。
  • MyClass._():等同于MyClass._private()。它 不是 默认的构造函数,而是一个私有的命名构造函数(即,调用者必须使用MyClass._()它来调用它)。在这种情况下,类作者想要一个私有构造函数,但又不想选择一个名称。(命名很难。)
2020-08-13