2012-11-27 85 views

回答

6

const表示編譯時間常數。表達式值必須在編譯時已知。 const修改「值」。

news.dartlang.org

「常量」具有以下含義:在箭稍微複雜和微妙。 const修改。創建集合時可以使用它,像const [1,2,3]這樣的 ,以及像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 
} 
+0

更多的例子,爲什麼我不能用常量不帶靜電?我的const不需要靜態類作用域,所以爲什麼我不得不聲明它是靜態的? – robbie

+0

@robbie你的常量也不需要爲每個實例重複。既然它是恆定的,它永遠不會改變,所以爲什麼浪費空間複製它呢?通過強制靜態聲明常量,它們只被放入內存一次,而不是每次創建一個實例。我相信這個解釋適用於C#和Dart。 –

+1

Dart中的Const值是「規範化的」,所以它們只有一個實例,因此「static const」是多餘的:「const」就足夠了。 [Seth Ladd關於此的文章]的最後一段(http://news.dartlang.org/2012/06/const-static-final-oh-my.html)事實上表明「const」是首選的風格,而「靜態const」不鼓勵。 – dharcourt