使用构造函数" className() 和 className._() 的区别

Mar*_*uti 4 dart 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();
Run Code Online (Sandbox Code Playgroud)

jam*_*lin 16

例如:

class MyClass {
  MyClass();

  MyClass.named();

  MyClass._private();

  MyClass._();
}
Run Code Online (Sandbox Code Playgroud)

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

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