[問題] 常數的問題
書上說C#有兩種常數
一個是const(compiler time常數)
另一個是readonly(runtime time常數)
const比較快,而readonly比較安全
如果在dll裡面有一個const常數 (假設其值為 10)
然後client app載入這個dll並取得const常數值為10
後來dll改版將這一個const常數值改為20
結果client app沒有rebuild的話,讀到的值還會是10,而不是改版後的20
client app必須要rebuild才能得到正確的const常數值(值為20)
但是如果將const改為readonly的話就沒有這個問題
為甚麼呢???
印象中C++應該不會有這樣的問題(用c++寫的client app,來讀取c++寫成的dll檔),
改版後的的c++ dll檔直接覆蓋舊版本dll檔
client app不需要rebuild也可以讀到改版後正確的const值
難道是因為c++載入dll的方式和C#載入dll的方式有所不同嗎????
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.240.143.125
推
05/21 01:11, , 1F
05/21 01:11, 1F
推
05/21 01:13, , 2F
05/21 01:13, 2F
推
05/21 11:05, , 3F
05/21 11:05, 3F
→
05/21 18:40, , 4F
05/21 18:40, 4F
Q1.為甚麼const編譯後是常數的話,load改版後的dll就會出錯??? (load到未改版的常數)
dll改版(將const值從10改為20)並且編譯後是以MSIL的形式存在,
const就算編譯過後是常數,在MSIL裡也會是改版後的常數值(在此例中值為20)
為什麼將改版後的dll附蓋掉之前的dll,還會load到舊的值(在此例中為10)
非得要load此dll的client AP重新編譯過後,才能得到正確的結果???
Q2.為什麼C++的AP load的C++的dll不會有這樣的問題???
因為c++和C# load dll的方式不一樣?? 還是c++的const編譯後是變數而不是常數???
※ 編輯: rosemary0401 來自: 111.240.143.125 (05/21 18:56)
→
05/22 01:01, , 5F
05/22 01:01, 5F
→
05/22 01:07, , 6F
05/22 01:07, 6F