当前位置:首页 > 科技  > 软件

C#.Net里面的.CCtor和Ctor是什么呢?

来源: 责编: 时间:2023-09-28 10:09:16 472观看
导读1.前言RT:有人问Net里面的.CCtor和Ctor是什么?首先说答案,.CCtor是静态构造函数,.Ctor是非静态构造函数。通过例子分析下这两个特殊的函数,本篇看下。2.概述先上例子:public class ABC{ public ABC(){ } int i=0x10;}pu

1.前言

RT:有人问Net里面的.CCtor和Ctor是什么?首先说答案,.CCtor是静态构造函数,.Ctor是非静态构造函数。通过例子分析下这两个特殊的函数,本篇看下。UXB28资讯网——每日最新资讯28at.com

2.概述

先上例子:UXB28资讯网——每日最新资讯28at.com

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(); }

简单点来说,类BBC的非静态构造函数就是BBC.Ctor,也就是构造函数BBC(){}.同理ABC的非静态构造函数ABC.Ctor也就是ABC(){}UXB28资讯网——每日最新资讯28at.com

作用为什么Roslyn编译器要加上一个这种函数,就是为了循环往上初始化父类。直到Object.Ctor为止,也就是初始化到最基础的Object类为止才不会初始化,一层层的向上执行。UXB28资讯网——每日最新资讯28at.com

以上面例子为例UXB28资讯网——每日最新资讯28at.com

运行的过程如下:UXB28资讯网——每日最新资讯28at.com

1.new BBC()2.BBC.Ctor3.ABC.Ctor4.Object.Ctor

也就是说,有多少个父类,它统统初始化。方便以后调用,比如ABC类里面有个变量i,就是此时被初始化的,如果没有被初始化,如果需要用到就会报错。这里注意,如果BBC类里面有全局变量,则优先于ABC里面的全局变量i初始化。UXB28资讯网——每日最新资讯28at.com

代码最后我们看下它的底层代码BBC bBC = new BBC() Program+BBC..ctorUXB28资讯网——每日最新资讯28at.com

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(){}UXB28资讯网——每日最新资讯28at.com

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(){}UXB28资讯网——每日最新资讯28at.com

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

本文链接:http://www.28at.com/showinfo-26-11890-0.htmlC#.Net里面的.CCtor和Ctor是什么呢?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 从零开发可视化大屏制作平台

下一篇: 了解Spring中循环依赖流程,绝杀面试官!

标签:
  • 热门焦点
  • 天猫精灵Sound Pro体验:智能音箱没有音质?来听听我的

    这几年除了手机作为智能生活终端最主要的核心之外,第二个可以成为中心点的产品是什么?——是智能音箱。 手机在执行命令的时候有两种操作方式,手和智能语音助手,而智能音箱只
  • Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • 2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • Automa-通过连接块来自动化你的浏览器

    1、前言通过浏览器插件可实现自动化脚本的录制与编写,具有代表性的工具就是:Selenium IDE、Katalon Recorder,对于简单的业务来说可快速实现自动化的上手工作。Selenium IDEKat
  • 一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 签约井川里予、何丹彤,单视频点赞近千万,MCN黑马永恒文希快速崛起!

    来源:视听观察永恒文希传媒作为一家MCN公司,说起它的名字来,可能大家会觉得有点儿陌生,但是说出来下面一串的名字之后,或许大家就会感到震惊,原来这么多网红,都签约这家公司了。根
  • 联想小新Pad Pro 12.6将要推出,搭载高通骁龙 870 处理器

    联想小新Pad Pro 12.6将于秋季新品会上推出,官方按照惯例直接在发布会前给出了机型的所有参数。联想小新 Pad Pro 12.6 将搭载高通骁龙 870 处理器,重量为 5
  • 电博会上海尔智家模拟500平大平层,还原生活空间沉浸式体验

    电博会为了更好地让参展观众真正感受到智能家居的绝妙之处,海尔智家的程传岭先生同样介绍了展会上海尔智家的模拟500平大平层,还原生活空间沉浸式体验。程传
Top