C# 一些概念

来源:互联网 发布:中广核软件人员工资 编辑:程序博客网 时间:2024/06/06 03:52

1.托管代码:

托管代码就是执行过程交由运行时管理的代码。

这种情况下,CLR(公用语言运行时),不管使用的是哪种实现(Mono/.NET Framework.NET Core)CLR负责提取托管代码,将其编译成机器代码,然后执行它,CLR还需要提供多个重要服务,例如自动内存管理/安全边界/类型安全等。

相反,如果运行C/C++程序,则运行的代码也称为“非托管代码”。在非托管环境中,程序员需要自己处理很多事情。

实际的程序在本质上是操作系统(OS)载入内存,然后启动的二进制代码。

2.中间语言:

中间语言是编译使用高级.NET语言编写的代码后获取的结果。

IL独立于在运行时顶层运行的任何特定语言,拥有行业规范。

从高级代码生成IL后,CLR接管工作,启动实时(JIT)编译过程,或者将代码从IL实时编译成可以真正在CPU上运行的机器代码。

3.自动内存管理

公共语言运行时的垃圾回收器为应用程序管理内存的分配和释放。

分配内存

初始化进程时,运行时会为进行保留一个连续的地址空间区域。这个保留的地址空间被称为托管堆。托管堆上部署了所有引用类型。

释放内存

垃圾回收器的优化引擎根据所执行的分配决定执行回收的最佳时间。通过检测应用程序的根来确定不再使用的对象,释放应用程序不再使用的对象的内存。

4.泛型

本质上是代码模板

5.委托和Lambda

委托定义类型,类型指定特定方法签名。

Action<>:需要使用委托参数执行操作的情况

Func<>:用于现有转换的情况,需要将委托参数转换成其他结果时

Predicate<>:用于确定参数是否满足委托条件的情况,也可写作Func<T,bool>

6.托管执行过程

A.选择编译器

若要获取公共语言运行时提供的好处,必须使用一个或多个面向运行时的语言编译器。

B.将代码编译成中间语言MSIL

当编译器生成MSIL的时候,他还生成元数据。元数据描述代码中的类型,包括每种类型的成员签名/代码引用的成员以及运行时在执行时间使用的其他数据。

C.将中间语言(MSIL)编译为本机代码

在执行时,实时(JIT)编译器将MSIL转换成为本机代码。在此编译期间,代码必须通检查MSIL和元数据的验证过程以查明是否可以将代码确定为安全类型

D.运行代码

7..NET中的序列化

序列化时将对象状态转换为可保持或传输的形式的过程,反序列化是将流转换为对象。这两个过程一起保证数据易于存储和传输。

 

原创粉丝点击