成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

趣談CLR中的靜態(tài)構造函數

開發(fā) 后端
在這里我們將談談CLR中的靜態(tài)構造函數,類的靜態(tài)構造函數也叫類型構造器,靜態(tài)構造器。

對于CLR中的靜態(tài)構造函數,我們將從簡單的概念開始講起,希望本文能對大家了解.NET中的靜態(tài)構造函數有所幫助。

類的靜態(tài)構造函數也叫類型構造器,靜態(tài)構造器,他調用的時刻由CLR來控制:

CLR會選擇如下時間之一來調用靜態(tài)構造函數:

1,在類型的***個實例創(chuàng)建之前,或類型的非繼承字段或成員***次訪問之前。這里的“之前”,代表前后銜接的意思。這里的時刻是精確的!

2,在非繼承的靜態(tài)字段或成員***次訪問之前的某個時刻,具體時刻不定!

由于調用的時刻不確定,所以我們***不要編寫依賴于特定的靜態(tài)構造函數的執(zhí)行順序的代碼,這樣很容易產生不可預料的后果!

下面大家看三個Demo,我們來更加深入的看看靜態(tài)構造函數的一些有趣的行為:

  1. Demo1:  
  2.  
  3.  static void Main(string[] args)  
  4. {  
  5. Console.WriteLine(B.strText);  
  6. }  
  7. public class A  
  8. {  
  9. public static string strText;  
  10. static A()  
  11. {  
  12. strText = "aaaa";  
  13. }  
  14. }  
  15. public class B : A  
  16. {  
  17. static B()  
  18. {  
  19. strText = "bbbb";   
  20. }  

大家猜猜結果是什么,可能有人認為輸出的是bbbb,因為訪問B.strText需要調用B類的靜態(tài)構造函數static B()。實際上輸出的結果是aaaa,因為strText是類A的靜態(tài)字段,而類B只是繼承了這個字段,所以這里會調用類A的靜態(tài)構造函數static A(),所以輸出結果是aaaa。這也沒有什么真正可說的,相信大家都能看出這個結果的。

下面看看第二個Demo:

  1. Demo2:  
  2.  
  3.  static void Main(string[] args)  
  4. {  
  5. B b = new B();  
  6. A a = new A();  
  7.  
  8. Console.WriteLine(B.strText);  
  9.  
  10. }  
  11. public class A  
  12. {  
  13. public static string strText;  
  14. static A()  
  15. {  
  16. strText = "aaaa";   
  17. }  
  18. }  
  19. public class B : A  
  20. {  
  21. static B()  
  22. {  
  23. strText = "bbbb";   
  24. }  

大家猜猜輸出結果是什么,可能有人認為會輸出aaaa,理由是new B()之前會調用static B(),然后new A()之前需要調用static A,這樣結果是aaaa,但是實際情況并非如果,正確的結果是bbbb,原因如下:


在執(zhí)行new B(); 之前,B類的靜態(tài)構造函數會調用,也就是會調用:

  1. static B()  
  2. {  
  3.  strText="bbbb";  

當執(zhí)行到strText=“bbbb"的時候,這時需要訪問strText字段,而B的strText字段是從A類繼承的,所以這里需要會先調用:

  1. static A()  
  2. {  
  3.  strText="aaaa";  
  4.  } 


執(zhí)行這個函數以后strText的值是aaaa

然后代碼又回到static B()中,這時才執(zhí)行static B()中的strText="bbbb"這行,所以strText這時的值是bbbb

當執(zhí)行A a=new A();的時候,不會在調用A的靜態(tài)構造函數了,因為前面已經調用過了,靜態(tài)函數在整個應用程序域的生命周期中只會調用一次!

原文標題:靜態(tài)構造函數趣談!

鏈接:http://www.cnblogs.com/xuefeng1982/archive/2009/10/19/1585865.html

【編輯推薦】

  1. 淺析C#數組操作方法
  2. C#數組操作全面分析
  3. C#數組和串操作經驗總結
  4. 為你解疑:CLR是什么?
  5. 分析與對比CLR Via C#靜態(tài)構造函數的性能
責任編輯:彭凡 來源: 安全中國網
相關推薦

2009-09-17 18:56:22

CLR Via C#

2009-10-23 11:31:05

CLR Via C#調

2009-09-18 09:02:45

CLR Via C#

2009-10-22 18:26:00

CLR集成性能

2024-12-31 00:07:12

2009-08-20 14:28:00

C#靜態(tài)構造函數

2009-07-31 15:37:45

C#靜態(tài)構造函數

2009-07-31 15:44:02

C#靜態(tài)構造函數

2010-01-27 16:10:32

C++靜態(tài)構造函數

2010-01-22 11:13:16

C++靜態(tài)

2009-08-13 18:02:11

C#靜態(tài)構造函數

2010-02-01 11:01:30

C++靜態(tài)構造函數

2025-02-06 13:23:09

C++函數參數

2009-08-13 18:10:31

C#靜態(tài)構造函數

2011-06-11 21:36:44

C#C++

2009-03-11 10:29:23

代碼契約.NETCLR

2009-07-31 16:06:50

成員函數構造函數C#

2009-03-17 16:29:53

SQL ServerCLR.NET Framew

2010-01-27 17:16:52

C++構造函數

2010-07-16 17:04:38

Perl方法
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品久久久久久久久中文字幕 | 亚洲免费一区 | 在线免费视频一区 | 91久久久久久久久久久 | av入口 | 在线观看成人小视频 | 人人干人人玩 | 久久久精品网站 | 日韩欧美亚洲 | 亚洲国产精品久久久久 | 少妇精品亚洲一区二区成人 | 精品国产一区久久 | 99re在线视频免费观看 | 宅男伊人 | 亚洲国产成人精品女人久久久 | 欧美簧片 | 国产成人99 | 91视频久久 | 人人玩人人干 | 欧美精品在线播放 | 男人天堂视频在线观看 | 91精品国产美女在线观看 | 男女视频在线看 | 91视频网址| 久久成人免费 | 国产精品亚洲精品 | 亚洲精品免费视频 | 在线播放精品视频 | 国产精品一区久久久久 | 免费观看视频www | 成人免费看片又大又黄 | 另类视频在线 | 秋霞国产| 欧美在线视频观看 | 古装人性做爰av网站 | 日韩精品不卡 | 日韩中文字幕 | 亚洲色图综合 | 亚洲精品成人网 | 亚洲精品久久久久久一区二区 | 91伊人网 |