Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 使用构造函数与;className()和className.()的名称_Flutter_Dart - Fatal编程技术网

Flutter 使用构造函数与;className()和className.()的名称

Flutter 使用构造函数与;className()和className.()的名称,flutter,dart,Flutter,Dart,我有两种编写构造函数的方法类名() 它们之间有什么区别?我应该在什么时候使用它们 class GlobalState{ final Map<dynamic,dynamic> _data=<dynamic,dynamic>{}; static GlobalState instance = new GlobalState._(); GlobalState._(); } //In Main Class G

我有两种编写构造函数的方法<代码>类名()

它们之间有什么区别?我应该在什么时候使用它们

 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();
类全局状态{
最终地图_data={};
静态GlobalState实例=新的GlobalState.uz();
全局状态;
}
//主课
GlobalState _store=GlobalState.instance;
及
全局状态类{
最终地图_data={};
静态GlobalState实例=新的GlobalState();
}
//主课
GlobalState_store=GlobalState();

您知道在java中没有像命名构造函数这样的功能。但dart提供了命名构造函数。 每当您想要创建更多的构造函数选项时,就应该在类中创建命名构造函数。 就像您在代码中所做的那样,例如:

class-MyClass{
MyClass();
MyClass.named();
MyClass._private();
我的班级;
}
上面的类有四个构造函数:

  • MyClass()
    :这是默认的未命名构造函数。在设计类时,您可能希望这表示人们大部分时间都应该使用构造函数。使用它更方便,因为它涉及的打字更少
  • MyClass.named()
    :这是一个命名构造函数。也许您希望您的类具有多个构造函数,以便可以以不同的方式构造类的实例。Dart不支持重载函数,所以如果需要多个构造函数,它们需要不同的名称。因此,如果需要多个构造函数,则需要命名其中的一些以区分它们。即使没有多个构造函数,也可能需要显式名称以避免歧义
  • MyClass.\u private()
    :在Dart中,以下划线开头的名称是私有的(通常对文件)
    MyClass.\u private()
    只是一个命名构造函数,不能在定义它的源文件之外使用。通常,当类希望强制调用方使用公共工厂构造函数(或静态方法)获取实例时,您会看到私有构造函数,特别是当类希望拥有单个实例时
  • MyClass.\u()
    :这相当于
    MyClass.\u private()
    。它不是默认构造函数,并且仍然是一个私有的命名构造函数(即,调用方必须使用
    MyClass.\uz()
    来调用它)。在这种情况下,类作者想要一个私有构造函数,但不想选择名称。(给事物命名很难。)
GlobalState.\uz()
将构造函数设置为私有,这意味着您无法使用它从外部实例化对象。而
GlobalState()
是一个可以从任何地方实例化的常规构造函数。