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 Dart立即分配给变量还是在构造函数中分配给变量?_Flutter_Dart - Fatal编程技术网

Flutter Dart立即分配给变量还是在构造函数中分配给变量?

Flutter Dart立即分配给变量还是在构造函数中分配给变量?,flutter,dart,Flutter,Dart,在Dart中,立即赋值与像Java一样在构造函数中赋值有区别吗 class Example { int x = 3; } vs 我这样问是因为当我使用颤振并试图将使用setState的函数分配给变量时,前一种方法是不可能的,但后一种方法是可能的。在你的小例子中,这无关紧要 通常,可以通过以下几种方式初始化实例变量: 内联(字段初始值设定项) 类示例1{ T x=数值; } 优点: 直接、简洁 成员将在所有构造函数中初始化 可用于初始化final或不可为空的成员 成员是在调用基类构造

在Dart中,立即赋值与像Java一样在构造函数中赋值有区别吗

class Example {
    int x = 3;
}
vs


我这样问是因为当我使用颤振并试图将使用setState的函数分配给变量时,前一种方法是不可能的,但后一种方法是可能的。

在你的小例子中,这无关紧要

通常,可以通过以下几种方式初始化实例变量:

内联(字段初始值设定项)
类示例1{
T x=数值;
}
优点:

  • 直接、简洁
  • 成员将在所有构造函数中初始化
  • 可用于初始化
    final
    或不可为空的成员
  • 成员是在调用基类构造函数之前初始化的,如果基类构造函数调用由派生类重写的成员函数,则这可能很重要
缺点:

  • 不能依赖于构造参数
  • 通常不能依赖于
    ,因为初始化发生在
    生效之前(即,不能依赖于其他实例成员)。(.这需要启用空安全功能。)
初始化成员列表
类示例2{
tx;
示例2():x=值;
}
优点:

  • 可用于初始化
    final
    或不可为空的成员
  • 成员是在调用基类构造函数之前初始化的,如果基类构造函数调用由派生类重写的成员函数,则这可能很重要
  • 可以利用构造参数
  • 初始化变量始终引用成员变量,而不是构造函数参数
缺点:

  • 如果类有多个构造函数,则需要重复初始化,或者构造函数应该重定向到公共构造函数
  • 无法依赖于
    ,因为初始化发生在
    生效之前(即,无法依赖于其他实例成员)
  • 只能初始化封闭类的成员。因为初始值设定项列表是在调用基类构造函数之前执行的,所以它们不能设置基类成员
构造体
类示例3{
tx;
例3(){
x=值;
} 
}
优点:

  • 可以利用构造参数
  • 可用于执行更复杂的初始化,例如无法通过单个表达式初始化成员的情况
  • 可以使用此(即,可以使用其他实例成员)
  • 可用于设置基类成员
缺点:

  • 不能用于初始化
    final
    或不可为空的成员
  • 如果类有多个构造函数,则需要复制初始化或重构初始化代码(例如,但不限于重定向到公共构造函数)
  • 成员在调用基类构造函数后初始化
  • 如果构造函数有一个隐藏成员变量的参数,则很容易意外引用该参数而不是成员。(有关详细信息,请参阅。)
也许有几点我忘记了,但我认为这应该涵盖主要的几点


直接的内联初始化首先发生,然后是初始化列表,然后是构造函数体。另请参见解释此仅对对象初始化的后期阶段有效的原因。

感谢您提供此信息并使其保持最新、信息丰富且组织有序。
class Example {
    int x;
    Example() {
        x = 3;
    }
}