1. 程式人生 > >C# 單例模式的不同寫法對靜態變數的影響

C# 單例模式的不同寫法對靜態變數的影響

今天遇到一個非常奇怪的問題,除錯了半天都沒搞好,最後只好加了一些判斷才搞定,回過頭來找原因,才發現原因讓我非常無語

於是對單例模式和靜態變數做了一下測試,總結了一下規律

首先是C#6.0最新出來的寫法,當執行建構函式時,Date2的值是正確的

然後,將Date2的順序調整一下,改到類的末尾

然後就發現在建構函式執行的時候,Date2的值居然是DateTime的初始值了,我猜測如果是引用型別的變數,估計就是null了

繼續嘗試單例的第二種寫法

可以看到,第二種寫法的情況下,Date2也沒有被初始化

再嘗試第三種寫法

用這種寫法,Date2的值正確了

百度了一下,發現在沒有寫靜態的建構函式時,靜態變數的初始化是按文字的順序執行的,所以第一次嘗試是正確的,而後兩次嘗試不對

至於在非單例模式類的建構函式中,Date2的值都是正確的,不受順序影響

所以單例模式還是老老實實按第三種寫法比較好,不要偷懶

不過單例模式中寫靜態變數的估計也少,把靜態變數都放到其他的類中就無所謂了,但是靜態變數的初始化順序問題可能還是需要注意的