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

趣談CLR中的靜態構造函數

開發 后端
在這里我們將談談CLR中的靜態構造函數,類的靜態構造函數也叫類型構造器,靜態構造器。

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

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

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

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

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

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

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

  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類的靜態構造函數static B()。實際上輸出的結果是aaaa,因為strText是類A的靜態字段,而類B只是繼承了這個字段,所以這里會調用類A的靜態構造函數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,原因如下:


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

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

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

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


執行這個函數以后strText的值是aaaa

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

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

原文標題:靜態構造函數趣談!

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

【編輯推薦】

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

2009-10-23 11:31:05

CLR Via C#調

2009-09-17 18:56:22

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-07-31 15:44:02

C#靜態構造函數

2009-07-31 15:37:45

C#靜態構造函數

2009-08-20 14:28:00

C#靜態構造函數

2010-01-22 11:13:16

C++靜態

2009-08-13 18:02:11

C#靜態構造函數

2010-01-27 16:10:32

C++靜態構造函數

2010-02-01 11:01:30

C++靜態構造函數

2025-02-06 13:23:09

C++函數參數

2009-08-13 18:10:31

C#靜態構造函數

2009-11-17 09:07:55

靜態構造函數

2011-06-14 12:27:38

C#C++

2009-03-11 10:29:23

代碼契約.NETCLR

2009-09-18 11:13:09

.Net CLR

2011-06-11 21:36:44

C#C++

2009-07-31 16:06:50

成員函數構造函數C#
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品亚洲精品国产欧美 | 久久久久无码国产精品一区 | 都市激情亚洲 | 日本a∨视频 | 一区二区三区欧美 | 日批免费观看 | 蜜桃av人人夜夜澡人人爽 | 精品日韩一区二区 | 国产精品久久久久久久久久久久久 | 欧美日韩国产一区二区 | 久久69精品久久久久久久电影好 | 精品欧美二区 | 成人精品一区二区 | 亚洲免费一区二区 | 免费久久精品 | 午夜免费网站 | 人人干人人爽 | 欧美a级成人淫片免费看 | 仙人掌旅馆在线观看 | 欧美精品免费观看二区 | 亚洲精品久久久一区二区三区 | 久久综合婷婷 | 国产精品一区二区无线 | 欧美激情一区 | 99久久久久久99国产精品免 | 91精品国产一区二区三区 | 欧美福利 | 色先锋影音| 免费黄色片在线观看 | 黄色网页在线 | 日韩欧美日韩在线 | av入口| 91在线最新| 日日噜噜噜夜夜爽爽狠狠视频97 | 九色在线观看 | 亚洲精品免费视频 | 欧亚av在线 | 91五月天| 日本欧美黄色片 | 亚洲久久在线 | 草草视频在线免费观看 |