程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 由const引發的版本控制問題

由const引發的版本控制問題

編輯:.NET實例教程
 

    最近,對項目的庫做了一次升級,程序一切正常。但是,有次打開Oracle,發現數據不對,表中還是沒有升級之前的老數據。於是,對所有庫做了一次徹底檢查,硬是沒找出bug 心裡想,先放著吧,說不定就來靈感了呢! 幾天後,我偶然把項目全部compiler一次,數據竟然正常了。怪,怪了。難道是常量的問題嗎?因為升級的後的庫,只對幾個地方做了修改,其中一個就是改變了常量的值。 先做個小DEOM看看吧!
定義庫

using System; 
using System.Collections.Generic; 
using System.Text; 
namespace ClassLibrary1 

    public class Class1 
    { 
        private const string i = "aaa"; 
        private string m = "bbb"; 
        public string getString() 
        { 
            return i; 
        } 
    } 

Class1中定義了一個常量i=”wmj”,還有一個全局對象變量m=”gmj”,僅此而已。 
打開ILDASM.EXE 

先看看m 
.fIEld private string m 
可以看到m被定義成私有的,字符串類型的對象字段。
 
再看看

.fIEld private static literal string i = "aaa" 
可以看到i被定義成私有的,字符串類型的類字段,而且初始值已經保存到IL中,問題就出在這裡了。
 
如果修改i=ccc,我發現如果不compiler引用他的程序,程序仍然維持i=”aaa”。
 
下面是修改前後的效果;


所以在數據需要跨程序集的時候,盡量避免定義為const類型,而且最好全部compiler一次。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved