const vs readonly

2016年11月26日 星期六

 

1.const的常數是在編譯時期將所有使用到的地方替換成實際的數值(效能較好)

 

2.readonly是在實際執行期間才會去查找(靈活性高),可當做執行階段當數使用

例:public static readonly uint timeStamp = (uint)DateTime.Now.Ticks;

 

3.const的常數不能同時是static

 

4.readonly不能在method中使用

 

5.readonly可以在建構式裡給初始值

 

 

2016-11-26 下午 10-35-12

 

利用ILSpy反編譯工具查看編譯出來的dll

2016-11-26 下午 10-35-50

 

 

 

public class ReadOnlyTest
  {
     class SampleClass
     {
        public int x;
        // Initialize a readonly field
        public readonly int y = 25;
        public readonly int z;

        public SampleClass()
        {
           // Initialize a readonly instance field
           z = 24;
        }

        public SampleClass(int p1, int p2, int p3)
        {
           x = p1;
           y = p2;
           z = p3;
        }
     }

     static void Main()
     {
        SampleClass p1 = new SampleClass(11, 21, 32);   // OK
        Console.WriteLine("p1: x={0}, y={1}, z={2}", p1.x, p1.y, p1.z);
        SampleClass p2 = new SampleClass();
        p2.x = 55;   // OK
	//p2.y = 10; //因為不是在建構函數給值所以會出錯
	//錯誤訊息:無法指定唯讀欄位(除非在建構函數或變數初始設定式)
        Console.WriteLine("p2: x={0}, y={1}, z={2}", p2.x, p2.y, p2.z);
     }
  }
  /*
   Output:
      p1: x=11, y=21, z=32
      p2: x=55, y=25, z=24
  */

 

 

參考來源:

https://dotblogs.com.tw/yc421206/archive/2011/06/06/27232.aspx

http://slmtsite.blogspot.tw/2016/10/c-36-constant.html

https://msdn.microsoft.com/zh-tw/library/e6w8fe1b.aspx

https://msdn.microsoft.com/zh-tw/library/acdd6hb7.aspx

0 意見: