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,一经查实,立即删除!

相关文章

组合模式,宏指令和普通指令的聚合应用(设计模式与开发实践 P10)

文章目录 定义举例抽象类文件系统常用 程序设计中有一些 事物是由相似的子事物 构成的例子 定义 回顾过去的命令模式,有一些命令里面包含了一个序列的操作,如果你玩魔兽世界或者类似的 MMO 游戏,里面你会用到 宏指令,就是一个指…

[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…

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

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

Linux目录权限的亿点点细节

在linux系统中用户对于目录的rwx权限意味着什么? 文章目录 rwx r 可以显示目录的内容,比如ls w 可以创建或删除文件,比如touch, rm x 可以进入到目录内,比如cd

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

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

rust流程控制

一、分支 (一)if 1.if 语法格式 if boolean_expression { }例子 fn main(){let num:i32 5;if num > 0 {println!("正数");} }条件表达式不需要用小括号。 条件表达式必须是bool类型。 2.if else 语法格式 if boolean_expression { } …

最新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…

【高性能计算】CUDA编程之OpenCV的应用(教程与代码-4)//test error

imread命令将返回以蓝色、绿色和红色(BGR格式)开头的三个通道 处理视频的main函数中需要做的第一件事是创建VideoCapture对象。 GPU CUDA模块中的函数都定义在cv::cuda命名空间中,将设备上配置给图像数据用的显存块作为其参数。 gettickcount…

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

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

Vue原理及源码设计模式

Vue是一种流行的JavaScript框架,用于构建用户界面。以下是Vue工作原理的简要概述: 响应式数据:Vue基于一个重要概念,即"响应式数据"。当创建一个Vue实例时,Vue会遍历数据对象中的所有属性,并使用…

【Oracle】Oracle系列之十四--触发器

文章目录 往期回顾前言1. 基本概念2. 行级触发器3. 语句级触发器4. 系统级触发器5. 替代触发器 往期回顾 【Oracle】Oracle系列之一–Oracle数据类型【Oracle】Oracle系列之二–Oracle数据字典【Oracle】Oracle系列之三–Oracle字符集【Oracle】Oracle系列之四–用户管理【Ora…

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打工人…

acwing算法基础之基础算法--高精度加法算法

目录 1 知识点2 模板 1 知识点 大整数 大整数,它们的长度都为 1 0 6 10^6 106。大整数是指长度为 1 0 6 10^6 106的整数。 大整数 - 大整数 大整数 * 小整数 大整数 / 小整数 把大整数存储到向量中,需要考虑高位在前还是低位在前,低位在前…

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

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

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

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