日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
趣談CLR中的靜態(tài)構(gòu)造函數(shù)

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

創(chuàng)新互聯(lián)公司2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元清鎮(zhèn)做網(wǎng)站,已為上家服務(wù),為清鎮(zhèn)各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

類的靜態(tài)構(gòu)造函數(shù)也叫類型構(gòu)造器,靜態(tài)構(gòu)造器,他調(diào)用的時(shí)刻由CLR來控制:

CLR會(huì)選擇如下時(shí)間之一來調(diào)用靜態(tài)構(gòu)造函數(shù):

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

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

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

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

 
 
 
  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. }  

大家猜猜結(jié)果是什么,可能有人認(rèn)為輸出的是bbbb,因?yàn)樵L問B.strText需要調(diào)用B類的靜態(tài)構(gòu)造函數(shù)static B()。實(shí)際上輸出的結(jié)果是aaaa,因?yàn)閟trText是類A的靜態(tài)字段,而類B只是繼承了這個(gè)字段,所以這里會(huì)調(diào)用類A的靜態(tài)構(gòu)造函數(shù)static A(),所以輸出結(jié)果是aaaa。這也沒有什么真正可說的,相信大家都能看出這個(gè)結(jié)果的。

下面看看第二個(gè)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. }  

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

在執(zhí)行new B(); 之前,B類的靜態(tài)構(gòu)造函數(shù)會(huì)調(diào)用,也就是會(huì)調(diào)用:

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

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

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

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

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

當(dāng)執(zhí)行A a=new A();的時(shí)候,不會(huì)在調(diào)用A的靜態(tài)構(gòu)造函數(shù)了,因?yàn)榍懊嬉呀?jīng)調(diào)用過了,靜態(tài)函數(shù)在整個(gè)應(yīng)用程序域的生命周期中只會(huì)調(diào)用一次!


當(dāng)前題目:趣談CLR中的靜態(tài)構(gòu)造函數(shù)
轉(zhuǎn)載來于:http://www.5511xx.com/article/dhohdoe.html