首页 > 编程语言 >C#图解教程笔记 - Chapter1 C#和.NET框架

C#图解教程笔记 - Chapter1 C#和.NET框架

时间:2023-08-29 14:34:37浏览次数:64  
标签:C# Chapter1 代码 程序 编译 编译器 NET CLR

0 摘要

CLR, BCL, FCL, DLL, CIL, JIT, CLI, CTS, CLS

1 在 .NET 之前

20世纪90年代末,使用微软平台的Windows编程分化成许多分支。如:

  • Visual Basic (VB)
  • C或 C++
  • 其他相关技术:
    • Win32 API
    • MFC
    • COM

所有这些编程技术有一个缺点,就是它们主要针对桌面程序而不是互联网进行开发。

愿景:需要一个集成的、面向对象的开发框架,它可以把一致和优雅带回编程。

2 .NET 时代

满足上述愿景所产生的框架。

.NET框架具备以下特点:

  • 多平台
  • 行业标准
  • 安全性

.NET框架由三部分组成:

  • 执行环境CLR
    • 内存管理和垃圾收集
    • 代码安全验证
    • 代码执行、线程管理及异常处理
  • 编程工具:涵盖了编码和调试需要的一切
    • Visual Studio集成开发环境(IDE)
    • .NET兼容的编译器(例如:C#、Visual Basic .NET、F#、IronRuby和托管的C++)
    • 调试器
    • Web开发服务器端技术,比如ASP.NET或WCF
  • BCL基类库

.NET框架带来的好处:

  • 面向对象的开发环境
  • 自动垃圾收集
  • 互操作性
  • 不需要COM
  • 简化的部署
  • 基类库
    • 通用基础类
    • 集合类
    • 线程和同步类
    • XML类

3 .NET编程语言编写的代码的编译过程

.NET语言的编译器接受源代码文件,并生成名为程序集的输出文件。

  • 程序集要么是可执行的,要么是DLL。
  • 程序集里的代码并不是本机代码,而是一种名称为CIL的中间语言。

程序集包含的信息中,包括下列项目:

  • 程序的CIL
  • 程序中使用的类型的元数据
  • 对其他程序集引用的元数据

程序的CIL直到被调用运行时才会被编译成本机代码。在运行时,CLR执行下面的步骤:

  1. 检测程序集的安全特性
  2. 在内存中分配空间
  3. 把程序集中的可执行代码发送给即时(JIT)编译器,把其中的一部分编译成本机代码。

程序集中的可执行代码只在需要的时候由JIT编译器编译,然后它就被缓存起来以备在后来的程序中执行。使用这个方法意味着不被调用的代码不会被编译成本机代码,而且被调用到的代码只被编译一次。

一旦CIL被编译成本机代码,CLR就在它运行时管理它,执行如释放无主内存、检查数组边界、检查参数类型和管理异常之类的任务。

基于此也产生了两个概念:

  • 托管代码
  • 非托管代码

无论原始源文件的语言是什么,都遵循同样的编译和执行过程。

源文件\(\rightarrow\)编译器\(\rightarrow\)程序集\(\rightarrow\)JIT编译器\(\rightarrow\)本机代码

4 CLR

.NET框架的核心组件是CLR,它在操作系统的顶层,负责管理程序的执行。

CLR还提供下列服务:

  • 自动垃圾收集
  • 安全和认证
  • 通过访问BCL得到广泛的编程能力,包括如 Web 服务和数据服务之类的功能。

5 CLI

CLI公共语言基础结构,它把.NET框架的所有组件连结成一个内聚的、一致的系统。

CLI的重要组成部分:

  • 公共类型系统CTS:CTS定义了一组丰富的内置类型,以及每种类型固有的、独有的特性。
  • 公共语言规范CLS:详细说明了一个.NET兼容编程语言的规则、属性和行为,其主题包括数据类型、类结构和参数传递。

标签:C#,Chapter1,代码,程序,编译,编译器,NET,CLR
From: https://www.cnblogs.com/Lacus1227/p/17664653.html

相关文章

  • Swagger3 (OpenAPI3)自定义参数对象渲染设置ModelConverter
    Swagger2设置方法以SpringDataJPA里的分页参数Pageable为例,在使用Swagger2的时候,可以通过自定义AlternateTypeRule,修改参数对象的参数渲染;如下/***分页参数实体类参数转换,让swagger显示正常的传参**@paramresolver*@return*/@BeanpublicAlternateTy......
  • mybatis plus 3.4以上分页无效问题,limit一直加不上,MybatisPlusInterceptor无效
    解决方案1、已注册@BeanpublicMybatisPlusInterceptormybatisPlusInterceptor(){MybatisPlusInterceptorinterceptor=newMybatisPlusInterceptor();PaginationInnerInterceptorpaginationInnerInterceptor=newPaginationInnerInterceptor(D......
  • Web Socket介绍
    在开发网络应用程序的时候,我们会遇到Socket这个概念。Socket是一个抽象概念,一个应用程序通过一个Socket来建立一个远程连接,而Socket内部通过TCP/IP协议把数据传输到网络:┌───────────┐┌───────────┐│Application│......
  • C# 获取Windows系统版本注意事项
    首先通过微软官方文档:https://learn.microsoft.com/zh-cn/windows/win32/sysinfo/operating-system-version了解各个操作系统对应的版本号 下面介绍3种获取版本号的方式及弊端1. Environment.OSVersion.VersionOperatingSystemos=Environment.OSVersion;......
  • 文心一言 VS 讯飞星火 VS chatgpt (83)-- 算法导论8.1 4题
    四、用go语言,假设现有一个包含n个元素的待排序序列。该序列由n/k个子序列组成,每个子序列包含k个元素。一个给定子序列中的每个元素都小于其后继子序列中的所有元素,且大于其前驱子序列中的每个元素。因此,对于这个长度为n的序列的排序转化为对n/k个序列中的k个元素的排序。试证......
  • 搭建自己的ChatGPT智能问答,HelpLook ChatBot 正式上线!
    基于已有内容的站点或现成文档零代码快速导入即可生成自己专属的ChatGPT智能问答机器人HelpLookChatBot,正式发布上线!只需连接您的数据源,HelpLook就能为您的数据创建一个类似ChatGPT的聊天机器人。您可以将它作为小工具以JS的方式添加到您的任意网站,或API集成的方式,与您专属......
  • Navicat 最新版下载_永久激活注册(附图文安装教程)
    分享一波Navicat15的最新激活版安装包和注册机,可以永久激活哟,笔者亲测有效,小伙伴们可放心下载,下面附上详细的图文安装教程。无图无真相,奉上Navicat15激活成功的画面:前言Navicat是一款强大的数据库管理和设计工具,支持Win、macOS和linux。直观的GUI让用户简单地管理MySQ......
  • Kubernetes集群部署三节点yum部署
    一、修改主机名(三个节点都操作)vi/etc/hostname#跟换主机名systemctlrestartsystemd-hostnamed#修改完成后重新链接服务二、同步时间(三个节点都操作)yuminstallntpdate-yntpdatetime.windows.com#时区设置cp/usr/share/zoneinfo/Asia/Shanghai/etc/localtime#最......
  • 当某个excel工作簿的某个单元格的值发生变动时, 自动执行python某脚本, 如何实现?
    要实现当Excel工作簿中的某个单元格值发生变化时自动执行Python脚本,你可以考虑以下步骤:监视单元格变化:首先,你需要实现监视Excel工作簿中的特定单元格是否发生了变化。这可以通过使用VBA(VisualBasicforApplications)宏来实现。打开Excel工作簿,按下ALT+F11打开VBA编辑器,然后......
  • RISCV-MINI cache小记
    该cache映射策略为直接映射,采用写回(writeback)方式。需要注意的细节在于cpu-cache通过mask信号判断访存是读还是写,显然mask全0时为读。下图FSM中省略了dirty会影响状态转移,比如WriteCache到WriteBack,当cache块为dirty时才会触发aw.fire(io.nasti.aw.valid:=is_dirty)。简单解释:......