Dart中使用的“const”关键字是什么?

时间:2012-11-27 04:41:17

标签: dart

有人可以向我解释如何/何时/为何使用const关键字,或者它只是“一种声明常量变量的方法”?如果是这样,它之间的区别是什么:

int x = 5;

const int x = 5;

请你们举个例子吗?

2 个答案:

答案 0 :(得分:16)

const表示编译时间常量。必须在编译时知道表达式值。 const修改了“值”。

来自news.dartlang.org

  

“const”的含义在Dart中有点复杂和微妙。   const修改。您可以在创建集合时使用它,   像const [1,2,3],以及构造对象(而不是new)   像const Point(2,3)。这里,const意味着对象的整体   深度状态可以完全在编译时确定   对象将被冻结并完全不可变。

如果您使用

const x = 5然后变量x可以用在像

这样的cosnt集合中
const aConstCollection = const [x];

如果您不使用const,只需使用x = 5然后

const aConstCollection = const [x];是非法的。

来自www.dartlang.org

的更多示例
class SomeClass {
  static final someConstant = 123;
  static final aConstList = const [someConstant]; //NOT allowed
}

class SomeClass {
  static const someConstant = 123; // OK
  static final startTime = new DateTime.now(); // OK too
  static const aConstList = const [someConstant]; // also OK
}

答案 1 :(得分:2)

以下是有关const值的一些事实:

  • 必须在编译时知道该值。

    const x = 5; // OK
    
  • 在运行时计算的任何内容都不能为const

    const x = 5.toDouble(); // Not OK
    
  • const值表示它是深恒定的,也就是说,它的每个成员都是递归恒定的。

    const x = [5.0, 5.0];          // OK
    const x = [5.0, 5.toDouble()]; // Not OK
    
  • 您可以创建const构造函数。这意味着可以从类中创建const值。

    class MyConstClass {
      final int x;
      const MyConstClass(this.x);
    }
    
    const myValue = MyConstClass(5); // OK
    
  • const值是规范实例。这意味着无论您声明多少实例,都只有一个实例。

    main() {
      const a = MyConstClass(5);
      const b = MyConstClass(5);
      print(a == b); // true
    }
    
    class MyConstClass {
      final int x;
      const MyConstClass(this.x);
    }
    
  • 如果您的班级成员为const,则还必须将其标记为staticstatic表示它属于该类。由于只有const值的一个实例,所以没有static就没有意义。

    class MyConstClass {
      static const x = 5;
    }
    

另请参见