一、.net和C#是什么关系

.net是一个程序运行的平台,它是c#,vb,F#等程序运行的平台,为这些语言提供基础类库、公共语言运行时(CLR)等相关支持。

C#是支持.net的一种编程语言。.net编程语言有很多种,常用的是C#,还有Visual Basic、C++/CLI、Eiffel、F#、IronPython等很多种。

visual studio是开发工具,支持这些编程语言开发相应的.net程序。

二、编译与执行

编译是把编程语言编写的源代码转成CIL(中间语言)并生成程序集的过程。执行是程序执行时CLR(公共语言运行时)捕获CIL后,激活JIT编译器,将CIL编译成机器语言的过程。上一张抄来的图(https://blog.csdn.net/lidandan2016/article/details/77868043):

三、名词解释

各种缩写,名词太多了,一直弄混,找一些经常看见的记录下。

1、CLR(Common Language Runtime,公共语言运行库):CLR是一个运行时环境,功能主要包括内存管理,程序集加载,异常管理,系统资源回收等。

2、托管代码:由CLR管理运行的代码。

3、非托管代码:与CLR无关的代码。

4、GC(Garbage Collector,垃圾收集器):GC只能回收托管资源(由CLR管理的存在于托管堆上的称为托管资源)。GC的运行不需要人工干预,CLR会在需要的时候调用GC进行垃圾回收。GC遍历托管堆上的对象,将不能回收的对象做上标记,最后没有标记的对象作为垃圾释放掉,释放后不连续的内存空间会压缩成连续的内存空间。

5、CIL(Common Intermediate Lauguage,公共中间语言):与IL,MSIL(微软中间语言)是一个概念,源代码在编译过程中被翻译成的一系列指令集。CIL是底层平台无关的,CLR使用不同CPU的即时编译器编译CIL为相应的机器代码。

6、元数据:描述数据的数据。描述了文件中定义的类型以及每个类型的成员,比如某个字段的访问权限、字段拥有者等信息。

7、程序集清单:本身也是一种元数据,描述程序集自身。记录了关联的外部程序集、程序集版本、版权信息等。发布的程序运行提示哪个dll版本不匹配就是路径下的dll文件版本与清单中记录的版本不一致。

8、程序集:由编译成生成的dll、exe文件。包含CIL、元数据、清单的一种集合,是可以被CLR加载并运行的一堆数据集。(VS里创建的一个新项目,比如一个类库,编译后就被打包成与类库名称相同的一个dll,这就是一个程序集)。

9、CTS(Common Type System,通用类型系统):一个正式的规范,规定了类型必须如何定义才能被CLR加载。主要是类、结构、枚举、委托、接口五中类型。system.Int32、system.Object等是内建的CTS数据类型。平时用的int ,string这些关键字是这些类型的一种代号。

10:CLS:一套规则,每种编程语言都有各自的语法,不同的语言功能,CLS就是一种能在各种语法中通用的一种准则。按照这个准则生成的程序集可以在其他语言中调用。

个人理解,后续慢慢补充完善。

初步了解.net的更多相关文章

  1. 移动端之Android开发的几种方式的初步体验

    目前越来越多的移动端混合开发方式,下面列举的大多数我都略微的尝试过,就初步的认识写个简单的心得: 开发方式 开发环境 是否需要AndroidSDK 支持跨平台 开发语言&技能 MUI Win+ ...

  2. CSharpGL(29)初步封装Texture和Framebuffer

    +BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...

  3. Android自定义View初步

    经过上一篇的介绍,大家对于自定义View一定有了一定的认识,接下来我们就以实现一个图片下显示文字的自定义View来练习一下.废话不多说,下面进入我们的正题,首先看一下我们的思路,1.我们需要通过在va ...

  4. 初步认识Node 之Node为何物

    很多人即便是在使用了Node之后也不知道它到底是什么,阅读完本文你应该会有一个初步的.具体的概念了.    Node的目标 提供一种简单的构建可伸缩网络程序的方法.那么,什么是可伸缩网络程序呢?可伸缩 ...

  5. [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)

    [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date  周六 10 一月 2015 By 钟谢伟 Category website develop ...

  6. 基于C/S架构的3D对战网络游戏C++框架 _05搭建系统开发环境与Boost智能指针、内存池初步了解

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

  7. Azure底层架构的初步分析

    之所以要写这样的一篇博文的目的是对于大多数搞IT的人来说,一般都会对这个topic很感兴趣,因为底层架构直接关乎到一个公有云平台的performance,其实最主要的原因是我们的客户对此也非常感兴趣, ...

  8. CozyRSS开发记录14-RSS源管理初步完工

    CozyRSS开发记录14-RSS源管理初步完工 1.添加源的响应 DialogHost.Show有几个版本的重载,加一个DialogClosingEventHandler参数.我们让添加源对话框的添 ...

  9. 初步了解CPU

    了解CPU By JackKing_defier 首先说明一下,本文内容主要是简单说明CPU的大致原理,所需要的前提知识我会提出,但是由于篇幅我不会再详细讲解需要的其他基础知识.默认学过工科基础课. ...

  10. Windows多线程多任务设计初步(转)

    Windows多线程多任务设计初步 [前言:]当前流行的Windows操作系统,它能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程 ...

随机推荐

  1. Spring Cloud中的负载均衡策略

    在上篇博客(Spring Cloud中负载均衡器概览)中,我们大致的了解了一下Spring Cloud中有哪些负载均衡器,但是对于负载均衡策略我们并没有去详细了解,我们只是知道在BaseLoadBal ...

  2. source map 的原理探究

    线上产品代码一般是编译过的,前端的编译处理过程包括不限于 转译器/Transpilers (Babel, Traceur) 编译器/Compilers (Closure Compiler, TypeS ...

  3. java基础4:深入理解final关键字

    本文主要介绍了final关键字的使用方法及原理 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech 文章首发于我的个人博客: https://h2pl. ...

  4. centos7修改网卡名字为传统名字

    前言:在centos6及其之前的系统中,我们已经习惯了网卡为eth0,eht1这种网卡命名方式,在centos7上网卡名字为ens33,ens37,ens38等名字,很别扭,想统一下网卡的命名. 1 ...

  5. Linux基础知识第四讲,文件内容命令

    目录 一丶常用命令 1.cat命令演示以及常用选项 2.grep 搜索命令的使用 3.echo 以及 重定向的使用 4.管道概念 一丶常用命令 序号 命令 对应英文 作用 01 cat 文件名 con ...

  6. 使用MaxCompute Java SDK 执行任务卡住了,怎么办?

    场景一 用户AA: “亲,用 MaxCompute Java SDK 跑作业,为什么卡住不动了?”me: “有 Logview 吗?发来看下”A: “没有,我用的是SDK,没Logview” 场景二 ...

  7. Java递归读取文件路径下所有文件名称并保存为Txt文档

    本文用递归的方法实现读取一个路径下面的所有文件并将文件名称保存到Txt文件中,亲测可用. 递归读取文件路径下的所有文件: /** * 递归读取文件路径下的所有文件 * * @param path * ...

  8. Mybatis源码之StatementType

      在mybatis中StatementType的值决定了由什么对象来执行我们的SQL语句.本文来分析下在mybatis中具体是怎么处理的. StatementType 1.StatementType ...

  9. Docker中安装WordPress

    前言 虚拟化技术风靡一时,还不层在生产环境中实践.只能是闭门造车,自己玩一玩了,接触了一下docker最简单的命令,这才自己搭建一个wordpress玩一玩. 安装wordpress之前先把本机的do ...

  10. 解决ASP.NET MVC 接受Request Payload参数问题

    今天与跟前端小伙伴对接口,发现微信小程序的POST带参数传值HttpContent.Request[]接收不到参数. 拿小程序官网文档举例 wx.request({ url: 'Text/Text', ...