程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#小常識之風趣的類型靜態結構器

C#小常識之風趣的類型靜態結構器

編輯:C#入門知識

C#小常識之風趣的類型靜態結構器。本站提示廣大學習愛好者:(C#小常識之風趣的類型靜態結構器)文章只能為提供參考,不一定能成為您想要的結果。以下是C#小常識之風趣的類型靜態結構器正文


這是C#中一個風趣的景象,或許您從中可以窺見些許CLR在結構類型時的行動,和JIT編譯的觸發式編譯進程。

看上面一段代碼:

class Program
    {
        static void Main()
        {
            myValueType1 type1 = new myValueType1();
            Console.WriteLine(myValueType1.myInt);
            Console.WriteLine("**********************");
            myValueType2 type2 = new myValueType2();
            type2.myInt =23;
            Console.WriteLine(type2.myInt);
            Console.WriteLine("**********************");
            myValueType3 type3 = new myValueType3();
        }
    }

    struct myValueType1
    {
        static myValueType1()
        {
            Console.WriteLine("Hello from myValueType1");
           // myInt = 111;
        }
        public static Int32 myInt;
    }

    struct myValueType2
    {
        static myValueType2()
        {
            Console.WriteLine("Hello from myValueType2");
        }
        public Int32 myInt;
    }

    struct myValueType3
    {
        static myValueType3()
        {
            Console.WriteLine("Hello from myValueType3");
            myInt = 333;
        }
        public static Int32 myInt;
    }

這裡界說了三個構造:myValueType1,myValueType2,myValueType3。三個構造均帶靜態結構器,在結構器中都有一句用來輸入的的代碼。在myValueType1和myValueType3的靜態。然後我們在main函數外面分離new 了響應的三個實例。您可以先想一想輸入的成果應當是如何的。
 現實上您會獲得以下的成果:

 我們看到固然三個構造中都有靜態結構器,卻只要第一個構造的被履行了。現實上,這個風趣的景象也是CLR對機能的斟酌,除非類型確切被拜訪到了,不然永久不會挪用到它的類型結構器,這個進程是JIT的。

當履行到第六行代碼時,CLR測驗考試要去myValueType1查找靜態字段myInt的值。這個時刻,myValueType1才是真正被拜訪到了。靜態結構器被履行,獲得響應的輸入。
而myValueType2中myInt是個實例成員,拜訪它的值只關系到實例type2實例。與類型自己沒有任何干系,CLR不會履行類型myValueType2的靜態結構器。

myValueType3跟myValueType11簡直是一樣的,myInt是靜態成員,然則在main函數中,myValueType3照樣沒有被真正拜訪到,只是應用它結構出了一個虛擬的對象構造,這類對象構造外面一切字段都被付與一個0值或許null值,所以第二行輸入為零
這些性質與JIT編譯器都是分不開的。

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