假設某 A.DLL 內含一 class 如下:
public sealed class Consts {
public static readonly Int32 const1 = 50;
public const Int32 const2 = 50;
}
某程式 B 使用了 A.DLL 內的 Consts,如下:
public void Test() {
Console.WriteLine(Consts.const1);
Console.WriteLine(Consts.const2);
}
這個函式會印出
50
50
一段時間之後,A.DLL 發行新版本,Consts 被改成這樣:
public sealed class Consts {
public static readonly Int32 const1 = 10;
public const Int32 const2 = 10;
}
若程式 B 沒有 recompile,而使直接使用新版的 A.DLL 的話,輸出結果會是:
10
50
這是因為,const 會直接鑲進目標程式的 code 裡(效能好),readonly 則是會執行期才去取值(效能較差)。B 程式其實等價於:
public void Test() {
Console.WriteLine(Consts.const1);
Console.WriteLine(50);
}
因此除非 B 做 recompile,否則 A.DLL 對於 Consts.const2 的改變不會被程式 B 看見。
沒有留言:
張貼留言