C# 图解教程 第5版 —— 第1章 C# 和 .NET 框架

文章目录

    • 1.1 在 .NET 之前
    • 1.2 .NET 时代
      • 1.2.1 .NET 框架的组成
      • 1.2.2 大大改进的编程环境
    • 1.3 编译成 CIL
    • 1.4 编译成本机代码并执行
    • 1.5 CLR
    • 1.6 CLI
    • 1.7 各种缩写
    • 1.8 C# 的演化
    • 1.9 C# 和 Windows 的演化(*)

1.1 在 .NET 之前

  • MFC(Microsoft Foundation Class,微软基础类库)

    微软公司提供的一个类库,以 C++ 类的形式封装了 Windows 的 API,并包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量 Windows 句柄封装类和很多 Windows 的内建控件和组件的封装类。

  • COM(Component Object Model,组件对象模型)

    基于 Windows 平台的一套组件对象接口标准,由一组构造规范和组件对象库组成。组件对象不使用方法而用接口来描述自身。

1.2 .NET 时代

​ .NET 框架的特点:

  • 多平台:可以在各种计算机上运行。
  • 行业标准:使用行业标准的通信协议,如 XML、HTTP、SOAP、JSON 和 WSDL。
  • 安全性:提供安全的执行环境,即使有来源可疑的代码存在。

1.2.1 .NET 框架的组成

​ 如图 1.1 所示。

image-20231005235647205
图1.1 .NET 框架的组成
  • CLR(Common Language Runtime,公共语言运行库)

    在运行时管理程序的执行,主要内容有

    • 内存管理和垃圾收集;
    • 代码安全验证;
    • 代码执行、线程管理及异常处理。
  • BCL(Base Class Library,基类库)

    是 .NET 框架使用的一个大类库,可以在程序中使用。

1.2.2 大大改进的编程环境

  1. 面向对象的开发环境

    CLR、BCL 和 C# 完全面向对象,形成良好的集成环境。

  2. 自动垃圾收集

    • GC(Garbage Collector,垃圾收集器)

      自动管理内存,删除程序不在访问的对象。

  3. 互操作性

    • 允许不同的 .NET 语言编写的软件模块无缝交互。
      • 只要遵循一定的规则,.NET 语言的程序可以相互使用其他 .NET 语言写的类;
      • .NET 框架被称为“语言无关”。
    • 提供平台调用特性(Platform Invoke,P/Invoke),允许 .NET 代码调用非 .NET 代码。
    • .NET 框架能与 COM 组件相互调用。
  4. 简化的部署

    • 不需要使用注册表注册。
    • 提供并行执行的特性:允许 DLL 不同版本在同一台机器上存在。
  5. 类型安全性

    CLR 检查并确保参数及其他数据对象的类型安全。

  6. 基类库

    .NET 框架提供庞大的基础类库(BCL),有时也称为 FCL(Framework Class Library,框架类库)。

1.3 编译成 CIL

​ .NET 语言的编译器接受源代码,生成名为程序集的输出文件,如图 1.2 所示。

image-20231006001514694
图1.2 编译过程
  • CIL(Common Intermediate Language,公共中间语言)

    即程序集里的代码,不是本机代码。

  • 程序集包含如下信息:

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

1.4 编译成本机代码并执行

​ 程序集的 CIL 直到被调用运行时才会被编译成本机代码,运行时执行的步骤如图 1.3 所示。

image-20231006001832196
图1.3 运行时被编译成本机代码
  1. 检查程序集的安全特性;
  2. 在内存中分配空间;
  3. 把程序集中的可执行代码发送给 JIT(Just-In-Time,及时编译器),编译一部分内容为本机代码。

​ 程序集中的可执行代码只在需要的时候由 JIT 编译,之后被缓存起来以备后续使用。一旦 CIL 被编译为本机代码,CLR 就在它运行时进行管理,如释放无主内存、检查数组边界、检查参数类型和管理异常等。

  • 托管代码:由 .NET 框架编写的代码,需要 CLR。

  • 非托管代码:不在 CLR 控制之下运行的代码,如 C/C++、DLL。

image-20231006002716824
图1.4 编译时和运行时的过程概览

1.5 CLR

​ CLR 是 .NET 框架的核心组件,位于操作系统的顶层,管理程序的执行,如图 1.5 所示。

image-20231006003334446
图1.5 CLR概览

1.6 CLI

  • CLI(Common Language Infrastructure,公共语言基础结构)

    一组 .NET 标准,将 .NET 框架的所有组件连接成一个内聚、一致的系统,详细说明了所有软件都必须遵守的规则和约定,如图 1.6 所示。

image-20231006003946782
图1.6 CLI的组成
  • CTS(Common Type System,公共类型系统)

    定义了在托管代码中一定会使用的类型的特征,如

    • 定义了一组丰富的内置类型,及每种类型固有、独有的特性;
    • .NET 兼容编程语言提供的类型,通常映射到 CTS 中已定义的内置类型集的某一个特殊子集;
    • 所有类型都继承 Object;
    • 确保系统类型和用户定义类型能被任何 .NET 兼容的语言所使用。
  • CLS(Common Language Specification,公共语言规范)

    详细说明了 .NET 兼容编程语言的规则、属性和行为,包括数据类型、类结构和参数传递。

1.7 各种缩写

image-20231006010243033
图1.7 .NET缩写

1.8 C# 的演化

image-20231006010337527
图1.8 C# 各版本的焦点特性

1.9 C# 和 Windows 的演化(*)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/96198.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[python 刷题] 4 Median of Two Sorted Arrays

[python 刷题] 4 Median of Two Sorted Arrays 题目: Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays. The overall run time complexity should be O ( l o g ( m n ) ) O(log (mn)) O(lo…

设计模式探索:从理论到实践的编码示例 (软件设计师笔记)

😀前言 设计模式,作为软件工程领域的核心概念之一,向我们展示了开发过程中面对的典型问题的经典解决方案。这些模式不仅帮助开发者创建更加结构化、模块化和可维护的代码,而且也促进了代码的复用性。通过这篇文章,我们…

Springboot+vue的开放性实验室管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的开放性实验室管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的开放性实验室管理系统,采用M&#xff08…

最新AI智能创作系统源码SparkAi系统V2.6.3/AI绘画系统/支持GPT联网提问/支持Prompt应用/支持国内AI模型

一、智能AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统,已支持OpenAIGPT全模型国内AI全模型,已支持国内AI模型 百度文心一言、微软Azure、阿里云通义千问模型、清华智谱AIChatGLM、科大讯飞星火大模型等。本期针对源码…

【立体视觉(五)】之立体匹配与SGM算法

【立体视觉(五)】之立体匹配与SGM算法 一、立体匹配一)基本步骤二)局部立体匹配三)全局立体匹配四)评价标准1. 均方误差(RMS)2. 错误匹配率百分比(PBM) 二、半全局(SGM)立体匹配一)代价计算二&a…

各平台更新根证书

windows7 windows7根证书更新 https://support.microsoft.com/en-us/topic/support-for-urgent-trusted-root-updates-for-windows-root-certificate-program-in-windows-a4ac4d6c-7c62-3b6e-dfd2-377982bf3ea5 Linux 查看证书 ls -l /etc/ssl/certs/更新根证书 update-ca…

项目规划得心应手:Plane 助你打造高效能团队 | 开源日报 No.48

streamlit/streamlit Stars: 27.5k License: Apache-2.0 Streamlit 是一个快速构建和共享数据应用程序的方法。它可以将数据脚本转换为可分享的 Web 应用,只需几分钟即可完成。该项目完全由 Python 编写,开源且免费!一旦创建了一个应用程序&…

Ubuntu 2204 搭建 nextcloud 个人网盘

Nextcloud是一套用于创建网络硬盘/云盘以存放文件的客户端-服务器软件,Nextcloud 完全开源并且免费。 一、搭建 ubuntu apache2 mysql php (lamp)环境 因为 nextcloud 服务是使用 php 语言和 mysql 数据库的web服务,因此需要…

FFmpeg 基础模块:容器相关的 API 操作

目录 AVFormat 模块 AVFormat 前处理部分 AVFormat 读写处理部分 小结 思考 FFmpeg 目录中包含了 FFmpeg 库代码目录、构建工程目录、自测子系统目录等,具体内容如下: 现在你知道 FFmpeg 的源代码目录中都包含了哪些内容,在之后使用 FFm…

kafka初体验基础认知部署

kafka 基础介绍 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发并于2011年开源。它主要用于解决大规模数据的实时流式处理和数据管道问题。 Kafka是一个分布式的发布-订阅消息系统,可以快速地处理高吞吐量的数据流,并将数据实时地分…

modelize.ai - 小记

文章目录 关于 关于 官网:https://www.beta.modelize.ai Modelize.ai是一个AI agents和teams的创作平台,通过结合多元的agents以及工作流的衔接,让AI agents之间高效协同,达到一键式完成复杂工作的效果。 公司的愿景是让AI打工人…

「专题速递」RTC云网端联合优化、弱网对抗策略、QUIC协议的能力和实践

随着互联网日益增长的加速需求、复杂的网络环境和多样化的视频业务,音视频技术领域的专家们正在不断探索如何实现准确和极低延迟的网络传输能力。他们在应用层流控、传输层协议设计以及跨层优化等方面积极努力,以改善用户的网络体验。 在当今数字化时代&…

Mac版快速切换工具:One Switch中文 for mac

One Switch是一款功能强大、体验极简的Mac菜单栏工具,适合需要频繁切换系统设置和启动应用程序的用户使用。通过它,用户可以更方便地完成日常操作,提高工作效率。 快速访问工具:One Switch提供了一个便捷的菜单栏图标,…

Android:实现手机前后摄像头预览同开

效果展示 一.概述 本博文讲解如何实现手机前后两颗摄像头同时预览并显示 我之前博文《OpenGLES:GLSurfaceView实现Android Camera预览》对单颗摄像头预览做过详细讲解,而前后双摄实现原理其实也并不复杂,粗糙点说就是把单摄像头预览流程写两…

计算机网络(第8版)-第4章 网络层

4.1 网络层的几个重要概念 4.1.1 网络层提供的两种服务 如果主机(即端系统)进程之间需要进行可靠的通信,那么就由主机中的运输层负责(包括差错处理、流量控制等)。 4.1.2 网络层的两个层面 4.2 网际协议 IP 图4-4 网…

Maven 中引用其他项目jar包出现BOOT-INF问题

问题 在B项目中引入A项目的类,但是发现怎么也引入不进来 A项目打包之后,想在B项目中引用jar 在B项目中发现类文件无法引用 参考网上进行清缓存等一系列操作都没有解决。 最后发现引用的jar包中包含BOOT-INF, 然后去A项目中查找&#xff…

黑马点评-02使用Redis代替session,Redis + token机制实现

Redis代替session session共享问题 每个Tomcat中都有一份属于自己的session,所以多台Tomcat并不共享session存储空间,当请求切换到不同tomcat服务时可能会导致数据丢失 用户第一次访问1号tomcat并把自己的信息存放session域中, 如果第二次访问到了2号tomcat就无法获取到在1号…

CSS小计

1:设置图片随窗缩放 使用百分比 width: 100%;height: 100%; 使用vmin: 将可视区域分为100vmin width: 100vmin;height: 100vmin; 2:设置字体颜色与背景色融合 mix-blend-mode: difference 3: 设置宽度自适应 width:fit-content 4:外边距合并 当两个相领的两个容…

Prompt-Tuning(一)

一、预训练语言模型的发展过程 第一阶段的模型主要是基于自监督学习的训练目标,其中常见的目标包括掩码语言模型(MLM)和下一句预测(NSP)。这些模型采用了Transformer架构,并遵循了Pre-training和Fine-tuni…

【MySql】4- 实践篇(二)

文章目录 1. SQL 语句为什么变“慢”了1.1 什么情况会引发数据库的 flush 过程呢?1.2 四种情况性能分析1.3 InnoDB 刷脏页的控制策略 2. 数据库表的空间回收2.1 innodb_file_per_table参数2.2 数据删除流程2.3 重建表2.4 Online 和 inplace 3. count(*) 语句怎样实现…