<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      Fork me on GitHub

      Effective C# 條款2

       圖1編譯時常量和運行時常量區別

       

        編譯時常量比運行時常量稍微快一點,但卻缺乏靈活性,但如果程序“慢”能確保正確運行,“快”有可能導致出錯,那么我相信大家考慮到“常量之間何必在乎那一點點誤差呢”當然穩定性首選的是運行時常量。

      // 編譯時常量聲明:

      public const int _Millennium = 2000;



      // 運行時常量聲明:

      public static readonly int _ThisYear = 2011;

       

                               圖2 運行時和編譯時常量的MSIL代碼

        通過比較編譯時常量和運行時常量的MSIL代碼發現,編譯常量在編譯后為變量提供常量值,而運行時常量并沒有提供常量值。

        我們知道,運行時常量和編譯時常量最重要的區別就在于運行時常量值的辨析發生在運行時,而編譯時常量值的辨析發生編譯時。換言之,使用運行時常量編譯后的 IL 代碼引用的是 readonly 變量,而非它的值;而使用編譯時常量編譯后的 IL 代碼將直接引用它的值——就像我們直接在代碼中使用常量值一樣。即使我們使用的是數值常量并跨程序集引用,情況也是一樣:如果在程序集 A 中引用程序集 B 中的常量,那么編譯后程序集 A 中出現的那個常量將被它的值所替換。這種差別對于代碼的維護性而言有著相當的影響。

      現在讓我們看一下它們的區別:

      /// <summary>
      /// 定義運行時常量和編譯時常量
      /// </summary>
      public class TestClass
      {
      public const int isConstVar = 5;
      public static readonly int inReadonlyVar = 1;
      }
      /// <summary>
      /// 測試運行時和編譯時常量區別
      /// </summary>
      class Program
      {
      static void Main(string[] args)
      {
      for (int i = TestClass.TestClass.inReadonlyVar; i < TestClass.TestClass.isConstVar; i++)
      {
      Console.WriteLine(
      "This is {0}", i);
      }
      Console.ReadKey();
      }
      }

            圖3輸出結果

      圖4編譯常量和運行常量MSIL

       

       

        通過上面我們可以發現編譯時常量是通過hard code方式替換為一個值常量,而運行時常量是通過一個引用方式來,如果我們修改編譯時常量值為10,而運行時常量值為3,修改如下:

      public class TestClass
      {
      public const int isConstVar = 10;
      public static readonly int inReadonlyVar = 3;
      }

        

        如果我們重新編譯TestClass,然而不重新編譯Program控制臺應用程序,而且把重新編譯后的TestClass copy到控制臺應用程序的bin中再次運行,大家可以猜猜看最后輸出的結果,我相信聰明的你肯定可以猜得到結果,沒錯結果如下:

          圖5輸出結果

       

       

        分析原因在于C#編譯器在第一次編譯控制臺應用程序集時,將其中的 isConstVar替換成了它對應的常量值5,而對于 inReadonlyVar來說,由于它被聲明為 readonly,所以它的辨析發生在運行時。因此,控制臺應用程序集在沒有被重新編譯的情況下, 仍然可以使用新的 inReadonlyVar值。

      posted @ 2011-04-05 15:01  JK_Rush  閱讀(544)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 无码天堂亚洲国产av麻豆| 成人片在线看无码不卡| 91网站在线看| 一本无码人妻在中文字幕免费| 精品国产乱弄九九99久久| 国产mv在线天堂mv免费观看| 国产精品白浆免费视频| 中国大陆高清aⅴ毛片| 亚洲一区二区三午夜福利| 久久一区二区中文字幕| 日本熟妇XXXX潮喷视频| 国产在线无码精品无码| 免费看男女做好爽好硬视频| 欧美亚洲另类制服卡通动漫| 久久综合激情网| 在线a亚洲v天堂网2018 | 亚洲午夜亚洲精品国产成人| 成人午夜精品无码区久久| 亚洲综合av一区二区三区| 国产精品大全中文字幕| 无码人妻丰满熟妇啪啪网不卡| 久久国产国内精品国语对白| 偷拍精品一区二区三区| 日日爽日日操| 国产精品高清一区二区三区不卡| 国产在线一区二区不卡| 亚洲欧美日韩久久一区二区 | 内射极品少妇xxxxxhd| 国产精品久久久久精品日日| 日韩精品亚洲精品第一页| 无码国产精品一区二区免费虚拟vr| 国产精品爽爽爽一区二区| 成人午夜免费无码视频在线观看| 中文字幕一区二区网站| 欧洲亚洲色一区二区色99| 中文人妻无码一区二区三区在线 | 两个人日本www免费版| 亚洲一本二区偷拍精品| 亚洲欧美综合一区二区三区| V一区无码内射国产| 日韩av裸体在线播放|