C#基础编程-----static 关键字/递归/中间语言IL(Intermediate language)/参数传递/数组

C#编码中间语言IL,也称为 MSIL 或 CIL C# 是一种编译型语言,它的源代码(.cs 文件)首先被编译成中间语言(IL,也称为 MSIL 或 CIL,即 Microsoft Intermediate Language),然后这个中间语言代码通常被封装在一个程序集(.dll 或 .exe 文件)中。这个过程是由 C# 编译器(如 csc.exe,它是 Microsoft .NET Framework SDK 的一部分)完成的。 阅读详情

用到的知识才需要去深究

1.static 关键字
通过查看 IL 代码,我们会发现 static class 实际上就是 abstract sealed class
static class 还有一个限制,那就是只能从 System.Object 继承

2.递归
什么是递归函数/方法?
任何一个方法既可以调用其他方法又可以调用自己,而当这个方法调用自己时,我们就叫它递归函数或者递归方法!
通常递归有两个特点:    
a.递归方法一直会调用自己直到某些条件满足,也就是说一定要有出口;
b.递归方法会有一些参数,而它会把这些新的参数值传递给自己;(自己调自己);
递归通常用于:  ①.阶乘  ②.斐波拉切数列;
a.如果递归溢出后,会报异常

3.中间语言IL(Intermediate language)/CIL(Common Intermediate Language)公共语言运行(使用工具ILSpy)
过程:
C#源文件hello.cs------>通过C#编译器进行编译------>编译成.NET 的PE文件结构(exe文件格式)------>当程序运行时,Windows的Loader加载器不会负责该程序的内存分配,线程管理等工作,而是只负责跳转到CLR的执行引擎(EE)中,将控制权交由CLR,由CLR进行分配内存,线程管理,异常处理等

关键字:
.method表示方法的意思,.method private hidebysig static void  Main(string[] args) cil managed表示的意思就是static void main(string[] args)
.entrypoint 标志方法的入口
.maxstack 表示分配堆栈大小
.localsinit中存放的是当前方法的局部变量,这里面是string类型,它的名称叫hello。Init指令表示对变量应以对应的类型默认值进行初始化,通常情况下变量名可以省略,在代码中将以零基索引来引用


先介绍几个关于MSIL内部知识点:
  ①.Managed Heap:这是动态配置(Dynamic Allocation)的记忆体,由 Garbage Collector(GC)在执行时自动管理,整个 Process 共用一个 Managed Heap,可以理解为引用类型的东西都放在这个Managed Heap中。
  ②.Call Stack:这是由 .NET CLR 在执行时自动管理的记忆体,每个Thread都有自己的Call Stack堆栈。每调用一次method,就会使得Call Stack上多了一个Record Frame;调用完毕之后,此Record Frame会被丢弃。一般来说,Record Frame内记录着method参数(Parameter)、返回位址(Return Address)、以及局部变量(Local Variable)。.NET CLR都是使用0, 1, 2…编号的方式来识别局部变量。
  ③.Evaluation Stack:这是由.NET CLR在执行时自动管理的记忆体,每个Thread都有自己专属的Evaluation Stack。压入的到Evaluation Stack的值,当方法调用结束时必须保持这个堆栈的平衡,这里面存放例如局部变量值,以及引用类型的地址。
  指令ldc是将参数存储至堆栈Evaluation Stack
  指令stloc是将变量存储至堆栈Call Stack
技巧:
ld开头就是加载数据到Evaluation Stack中,而st开头就是将Envaluation Stack中的数据保存到Call Stack,Call Stack存放局部变量值。

4.参数传递
当调用带有参数的方法时,您需要向方法传递参数。在 C# 中,有三种向方法传递参数的方式:

方式    描述
值参数    这种方式复制参数的实际值给函数的形式参数,实参和形参使用的是两个不同内存中的值。在这种情况下,当形参的值发生改变时,不会影响实参的值,从而保证了实参数据的安全。
引用参数    这种方式复制参数的内存位置的引用给形式参数。这意味着,当形参的值发生改变时,同时也改变实参的值。
输出参数    这种方式可以返回多个值。---按照用户输入的输出数据
个人理解:值传递是传递栈中的值,引用传递传递栈中的地址

5.数组
数组是一个引用类型,所以您需要使用 new 关键字来创建数组的实例。
一维数组
冒泡排序就是让一个数组中,从大到小或从小到大,使数组中的数不断互相交换位置来排序的方法。
注:命名空间下的类型可以为:Class、interface、delegate、struct、enum,不可以直接写变量和方法。
 

C#中的static关键字详解 阅读详情

相关推荐

双三相电机控制避坑指南:为什么你的SVPWM谐波大?四矢量调制实战解析

本文深入解析双三相电机控制中SVPWM谐波大的问题,并提供四矢量调制实战方案。通过分析谐波来源、四矢量调制原理及工程实现步骤,显著降低电流THD至3-5%,提升系统效率2.3个百分点。特别适合需要优化电机控制的工程师参考。

weixin_30645617的博客 397

IL汇编语言介绍(译)

原文地址 http://www.cnblogs.com/xiaoxiangfeizi/archive/2011/08/08/2130768.html  原文作者 潇湘妃子 IL汇编语言介绍(译) 最近在学习IL,在CodeProject上

line_cheng的专栏 4544

jetson nano网络配置(有线、无线、USB)

注意:本节内容使用Jetson nano B01 版本或Jetson nano ALT 版本安装方式相同,在安装无线网卡等设备时,由于线材和设备比较脆弱,需要轻拿轻放,接口连接不上时,需要重新对准接口在进行连接,不要强行连接。Jetson nano 需要连接网络来进行更多的操作,本节就来讲解Jetson nano 的三种网络连接方法。有线:我们可以使用网线连接Jetson nano 的RJ45 接口,实现联网。

m0_73841621的博客 1万+

NET中IL理解(转)

.NET CLR 和 Java VM 都是堆叠式虚拟机器(Stack-Based VM),也就是說,它們的指令集(Instruction Set)都是採用堆叠运算的方式:执行时的资料都是先放在堆叠中,再进行运算。JavaVM 有約 200 個指令(Instruction),每個指令都是 1 byte 的 opcode(操作码),后面接不等数目的参数;.NET CLR 有超過 220個指令...

weixin_30709929的博客 380

【2026 Science Robotics】Learning realistic lip motions for humanoid face robots

哥伦比亚大学Yuhang Hu团队提出了一种创新方法,通过10自由度软体嘴唇设计和自监督学习算法解决仿人机器人嘴唇动作僵硬问题。研究采用变分自编码器(VAE)和面部动作Transformer(FAT)模型,将语音信号转化为机器人可执行的电机指令。实验表明,该方法在多语言测试中表现优异,用户偏好率达62.5%,显著提升了口型同步的真实感和流畅度。该成果突破了传统机械结构的限制,为跨越"恐怖谷效应"提供了有效解决方案。

志在山顶的人,不会贪念山腰的风景 308

LPDDR6 技术标准详解(JESD209-6)

是继 LPDDR5/5X 之后的新一代低功耗 DRAM 标准,专为满足移动终端、AI、边缘计算等高带宽、低功耗场景而设计。该标准通过全新架构、动态功耗控制机制和增强型数据完整性机制,实现性能、能效与可靠性的全面升级。LPDDR6 并非仅是速度升级,更是内存架构设计思路的演进,围绕“低功耗 + 高带宽 + 强安全”的三维目标,构建下一代 SoC 平台关键基础。✅ 高带宽:支持 32B/64B 动态突发✅ 低功耗:动态电压、通道切换✅ 高可靠性:ECC + 自测试 + 安全区。

weixin_43199439的博客 2580

il中间语言-张银-博客园

il中间语言-张银-博客园 2012年01月14日   一、IL与汇编语言   IL(Intermediate Language)是微软.NET平台上衍生出的一门中间语言,.NET平台上的各种高级语言(如C#,VB,F#)的编译器会将各自的代码转化为IL。,其中包含了.NET平台上的各种元素,如"范型"、"类"、"接口"、"模块"、"属性"等等。值得注意的是,各种高级语言本身可能根本...

ldi543lc 355

OD图 arcgis曲线制作插件 od图曲线 路径图曲线制作插件 航线图曲线制作插件

在ArcGIS 10.2 中导入节点数据,打开插件,选择输入起始节点和目标节点的节点文件Point,以Name字段(地名)为连接线的起始字段和目标字段,(Input Table File)选择连接关系表格SDLine.csv,(Origin Column 和 Destination Column)为起始节点和目标节点,(Output Path)为输出路径,应选择.gdb数据库路径,否则容易报错,(Chord Coefficient)为连线的曲率,数值越大,曲率越高。运行环境:ArcGIS10.2。...

JData_Engineer的博客 2670

IL中间语言理解

IL :IL是.NET框架中中间语言(Intermediate Language)的缩写。使用.NET框架提供的编译器可以直接将源程序编译为.exe或.dll文件,但此时编译出来的程序代码并不是CPU能直接执行的机器代码,而是一种中间语言IL(Intermediate Language)的代码 IL本身逻辑很清楚,主要是把指令的意思搞明白就好办了。记指令只要记住几个规律就好,大致可分为三类: 1.直观型 Add:将两个值相加并将结果推送到计算堆栈上 Sub:从其他值中减去一个值并将结果推送到计算堆栈上 Ca

weixin_41044151的博客 1611

10、X射线聚焦与光学元件技术解析

本文深入解析了X射线聚焦与光学元件技术,重点讨论了椭圆镜的聚焦原理及局限性,多层镜的设计优化及其突破性应用,以及X射线波导的基础理论和模式求解方法。文章还总结了这些技术的优势、局限及其在材料科学、生物学和医学等领域的广泛应用前景。通过理论推导与技术改进,这些光学元件为X射线成像技术的发展提供了重要支撑。

pz890123的博客 121

Pdu Router(PduR)模块

1. PduR路由基本功能 2. PduR总线网关功能 3. PduR缓存机制 4. 总结

weixin_43759043的博客 3849

C# 简介

C# 是一个现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的,由 Ecma 和 ISO 核准认可的。 C# 是由 Anders Hejlsberg 和他的团队在 .Net 框架开发期间开发的。 C# 是专为公共语言基础结构(CLI)设计的。CLI 由可执行代码和运行时环境组成,允许在不同的计算机平台和体系结构上使用各种高级语言。 下面列出了 C# 成为一种广泛应用的专业语言的原因: 现代的、通用的编程语言。 面向对象。 面向组件。 容易学习。 结构化语言。 它..

weixin_49756092的博客 7777

MoCap 动作捕捉开源库教程

数据通过 tf2 和支持不同 QoS 设置的 /poses 主题直接发布。该软件包最初是为 Crazyswarm 开发的,用于跟踪多达 50 个飞行机器人。

机器人控制与仿真应用 1307

.NET语言的编译过程:中间语言(IL)和即时编译器(JIT)

.NET语言的编译: 高级语言 ----编译----> IL中间语言 ----JIT----->汇编语言 .NET语言的编译分为两个阶段.首先高级语言被编译成一种称作IL的中间语言,与高级语言相比,IL更像是机器语言,然而,IL却包含一些抽象概念(比如:类、异常),这也是这种语言被称为中间语言的原因。IL被打包在DLL或EXE文件中,而DLL和EXE在.NET中的主要区别就是:只有EXE可以直接被运行,而二者都可被某个正在执行的进程动态装载(后文详述)。由于机器的CPU只能执行本地汇编语言,而不

weixin_41044151的博客 1328

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IL(中间语言)的强大背后大佬是如何运作的

IL作为.NET框架的中间语言,提供了平台无关性和语言间的互操作性,使得开发者能够在不同平台上使用多种语言进行开发。Xamarin则利用Mono框架的优势,支持跨平台开发,尤其是在移动应用开发中,提供了灵活的解决方案。通过将不同语言编译为IL代码,.NET框架实现了语言间的交互操作。这种机制不仅增强了开发的灵活性,还使得像Unity3D这样的开发环境能够支持多种编程语言的混合使用,从而满足不同开发者的需求。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 1251

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

IL(中间语言)

http://blog.youkuaiyun.com/dodream/article/details/4726421 一、IL与汇编语言 IL是微软.NET平台上衍生出的一门中间语言,.NET平台上的各种高级语言(如C#,VB,F#)的编译器会将各自的代码转化为IL。,其中包含了.NET平台上的各种元素,如“范型”,“类”、、“接口”、“模块”、“属性”等等。值得注意的是,各种高级语言本身可能根本没有这些

u014605728的博客 7413

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

什么是IL

1.1 什么是IL   IL是.NET框架中中间语言(Intermediate Language)的缩写。使用.NET框架提供的编译器可以直接将源程序编译为.exe或.dll文件,但此时编译出来的程序代码并不是CPU能直接执行的机器代码,而是一种中间语言IL(Intermediate Language)的代码(来源百度) 1.2 为什么要了解IL    在很多时候不明白代码是如何...

birdswillbecomdragon的博客 4976

了解IL语言(Intermediate Language)

了解IL语言(Intermediate Language) 原文链接:http://www.lupaworld.com/article-229958-1.html 1.1 什么是IL   IL是.NET框架中中间语言(Intermediate Language...

diaojian2679的博客 1402

c# IL 入门

看下面这个例子: using System; using System.Collections.Generic;   namespace ConsoleApplication3 {     class Program     {         delegate void Printer();         //代理相当于一个类型         static void Pr...

icebergliu1234的博客 1万+

中间语言(IL)

一、IL与汇编语言 IL是微软.NET平台上衍生出的一门中间语言,.NET平台上的各种高级语言(如C#,VB,F#)的编译器会将各自的代码转化为IL。其中包含了.NET平台上的各种元素,如“泛型”、“类”、“接口”、“模块”、“属性”等等。值得注意的是,各种高级语言本身可能根本没有这些“概念”在里头,如IronScheme是一个在.NET平台上的Scheme语言实现,其中根本没有前面提到的这些I

zhoujianfei 1648

详解.NET IL代码

IL是跟我高级架构经理的分享和博客园相关的博客学习总结的,最后留2个题目,也是我的高级架构经理分享中提到的两个好玩的问题,也能看出对IL的掌握的程度。

精选资讯文章 1136

查看C#的IL代码

IL(Intermediate Language),它也称为CIL或者MSIL,译成中文就是“中间语言”。 C:\Program Files\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools找到ILDasm.exe。它可将.exe文件反编译成IL代码。 命令:ldasm .\XXX.exe /output:XXX.il

没有永远的渣渣 1万+

c#的逆向工程-IL指令集

一些 IL 语言解释: 跳转指令集合 Public field Static Beq 如果两个值相等,则将控制转移到目标指令。 Public field Static Beq_S 如果两个值相等,则将控制转移到目标指令(短格式)。 Public field Static Bge 如果第一个值大于或等于第二个值,则将控制转移到目标指令。 P...

weixin_30896825的博客 349

C# -- static 关键字

stati 关键字

qq_54422936的博客 5657

C# static的用法详解

目录 一、静态类 1、静态类的主要特性: 2、静态类与私有构造函数区别: 二、静态成员 三、静态方法 四、静态构造函数 五、静态成员的存储 5.1 静态全局变量 定义: 特点: 5.2 静态局部变量 定义: 特点: 5.3 静态数据成员  内存分配: 初始化和定义: 特点: 访问形式: 作用: 5.4 静态成员函数 特点: 作用: 调用形式: 注意: static静态的,不变的,在某个类中只有一个,不会因实例化对象的不同而不同。 static可以修饰...

W_H_M_2018的博客 1万+
上一篇: webSpider----request
下一篇: SAP MM模块业务流程------物料主数据/供应商主数据/信息维护流程/库存物料采购流程
卓炳坤
博客等级 码龄10年 33粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值