const和readonly比較
1.const預設是靜态的,隻能由類型通路,不能和static同時使用,否則編譯錯誤;readonly預設是非靜态,由執行個體對象來通路,可以顯式使用static定義為靜态成員。
2.const隻能引用在值類型和string類型上,其他引用類型常量必須聲明為null,否則以new為const引用類型常量指派,編譯器會提示錯誤,原因是構造函數初始化在運作時,而非編譯時;readonly隻讀字段可以是任意類型,但是對于引用類型字段來說,readonly不能限制對該對象執行個體成員的讀寫控制。
3.const必須在字段聲明時初始化;而readonly可以在聲明時,或者構造函數中進行初始化,不同的構造函數可以為readonly常量實作不同的初始值
4.const可以定義字段和局部變量;而readonly則隻能定義字段
5.const由于是靜态常量是以在編譯時會對常量進行解析,而readonly是動态常量在編譯期間編譯器将其标示為隻讀常量,而不用常量的值代替,這樣就不必在聲明的時候就初始化,而可以延遲到構造函數中初始化
6.從應用角度來看,對于恒定不變且單獨使用的量來說,應該考慮聲明為const常量,例如性能比,百分比等;而對于可能随實際運作發生變化的量,應該考慮聲明readonly常量,例如日期或時間,資料庫中的主鍵id等