Dart:为什么常量变量不能成为实例变量?

Buy*_*ack 5 dart flutter

https://www.dartlang.org/guides/language/language-tour#final-and-const

\n\n

在 Dart 文档语言之旅中,它说“注意:实例变量可以是最终变量,但不能是常量。最终实例变量必须在构造函数体在变量声明处启动 \xe2\x80\x94 之前通过构造函数参数或在构造函数\xe2\x80\x99s 初始值设定项列表。”

\n\n

但可以使用常量构造函数创建常量对象。为什么在 Dart 中不能将常量变量声明为成员变量?

\n

Gün*_*uer 5

const表示编译时常数。
如果您需要在运行时创建实例来创建值,则它不再是编译时常量,因此它的成员也不能是const.

静态成员不需要创建实例,因此无论类是否有 const 构造函数或者是否使用它,静态成员都可以是常量const


Mar*_*lle 2

类中可以有常量,但它们不会被归类为实例变量。关键在于final和const之间的区别,你不能有const实例变量,因为常量不是变量。

  • 最终变量只能分配一次,但这发生在运行时。
  • const 关键字表示编译时常量。

不过,类内的常量必须是静态的,因此您可以编写如下内容:

class MyClass {
    static const kMyConstant = 100;

    void talk() {
        print('My constant is $kMyConstant');
    }
}
Run Code Online (Sandbox Code Playgroud)

这在 dart 中是完全有效的。