曾幾何時,對C#編譯時與運行時的理解總是不是那么明顯。以下對此部分說明一下自己的理解。
定義
編譯時
將C#程序編譯成中間代碼的過程。其過程是對程序進行詞法分析,語法分析等。
運行時
就是程序最終分配內存運行的過程。在運行的過程中也需要進行類型檢查。例如數組是否越界檢查,除零錯誤檢查等
編譯時常量與運行時常量
編譯時常量用const關鍵字定義,例如 public const double pi=3.14159。注意點:
1、編譯時常量必須在定義時賦值
2、除string外的引用類型(包括可空類型)只能定義編譯時常量為null,相當於編譯時常量不可通過new進行初始化
3、結構類型不能定義為常量,例如DateTime類型不可定義編譯時常量。
4、編譯時常量一旦賦值就不能再改變其值。
運行是常量用readonly定義,它是在程序加載到內存中運行后才確定其值的。其值可以通過以下幾種方式賦值:
1、定義時賦值
2、類的構造函數內賦值。
對於性能而言:編譯時常量在編譯時已經確認並且不可修改,而運行時常量則是在運行時才確定。所以編譯時常量在性能上優於運行時常量。但是運行時常量靈活性優於編譯時常量。所以其應用需要看具體情況而定。