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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C#.Net里面的.CCtor和Ctor是什么呢?

1.前言

RT:有人問Net里面的.CCtor和Ctor是什么?首先說答案,.CCtor是靜態(tài)構(gòu)造函數(shù),.Ctor是非靜態(tài)構(gòu)造函數(shù)。通過例子分析下這兩個(gè)特殊的函數(shù),本篇看下。

2.概述

先上例子:

public class ABC{
  public ABC(){
  }
  int i=0x10;
}
public class BBC:ABC{
  public BBC(){
  }
  int i = 0x20;
}
 static void Main(string[] args)
 {
     BBC bBC = new BBC();
 }

簡單點(diǎn)來說,類BBC的非靜態(tài)構(gòu)造函數(shù)就是BBC.Ctor,也就是構(gòu)造函數(shù)BBC(){}.同理ABC的非靜態(tài)構(gòu)造函數(shù)ABC.Ctor也就是ABC(){}

作用為什么Roslyn編譯器要加上一個(gè)這種函數(shù),就是為了循環(huán)往上初始化父類。直到Object.Ctor為止,也就是初始化到最基礎(chǔ)的Object類為止才不會(huì)初始化,一層層的向上執(zhí)行。

以上面例子為例

運(yùn)行的過程如下:

1.new BBC()
2.BBC.Ctor
3.ABC.Ctor
4.Object.Ctor

也就是說,有多少個(gè)父類,它統(tǒng)統(tǒng)初始化。方便以后調(diào)用,比如ABC類里面有個(gè)變量i,就是此時(shí)被初始化的,如果沒有被初始化,如果需要用到就會(huì)報(bào)錯(cuò)。這里注意,如果BBC類里面有全局變量,則優(yōu)先于ABC里面的全局變量i初始化。

代碼最后我們看下它的底層代碼BBC bBC = new BBC() Program+BBC..ctor

00007FF862D006D7 48 B9 50 21 DF 62 F8 7F 00 00 mov         rcx,7FF862DF2150h  
00007FF862D006E1 E8 7A 02 B0 5F       call        CORINFO_HELP_NEWSFAST (07FF8C2800960h)  
00007FF862D006E6 48 89 45 20          mov         qword ptr [rbp+20h],rax  
00007FF862D006EA 48 8B 4D 20          mov         rcx,qword ptr [rbp+20h]  
00007FF862D006EE E8 05 E7 0D 00       call        Test_.Program+BBC..ctor() (07FF862DDEDF8h)

int i=0x10 public ABC(){}

00007FF862D015C7 E8 44 64 C2 5F       call        00007FF8C2927A10  
00007FF862D015CC 48 8B 4D 40          mov         rcx,qword ptr [rbp+40h]  
00007FF862D015D0 C7 41 08 10 00 00 00 mov         dword ptr [rcx+8],10h  
00007FF862D015D7 48 8B 4D 40          mov         rcx,qword ptr [rbp+40h]  
00007FF862D015DB FF 15 4F FA F6 FF    call        qword ptr [CLRStub[MethodDescPrestub]@00007FF862C71030 (07FF862C71030h)] 
00007FF862D015E1 90                   nop  
00007FF862D015E2 90                   nop  
00007FF862D015E3 FF 15 2F 63 12 00    call        qword ptr [CLRStub[MethodDescPrestub]@00007FF862E27918 (07FF862E27918h)]

public BBC(){}

00007FF862D0157B E8 60 D8 0D 00       call        Test_.Program+ABC..ctor() (07FF862DDEDE0h)  
00007FF862D01580 90                   nop  
00007FF862D01581 90                   nop

本文名稱:C#.Net里面的.CCtor和Ctor是什么呢?
分享路徑:http://www.5511xx.com/article/cocogcp.html