第1章 C# 和 .NET 框架

1.1 在 .NET 之前

C#为在.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框架组成

.NET框架由三部分组成:CLR(Common Language Runtime,公共语言运行库)、BCL(Base Class Library,基类库)、编程工具。

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

  • 内存管理和垃圾收集;
  • 代码安全验证;
  • 代码执行、线程管理及异常处理。

BCL(Base Class Library,基类库)是 .NET 框架使用的一个大类库,可以在程序中使用。

编程工具包括编码和调试需要的一切,主要包括:

  • 集成开发环境 IDE

  • .NET兼容的编译器

  • 调试器

  • Web开发服务器端技术

1.2.2 大大改进的编程环境

.NET主要特点及好处

1.面向对象的开发环境

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

系统为本地程序和分布式系统都提供了一直的、面向对象的编程模型。

2.自动垃圾收集

GC(Garbage Collector,垃圾收集器)自动管理内存,自动删除程序不再访问的对象。

3.互操作性

  • 允许不同的 .NET 语言编写的软件模块无缝交互。
    只要遵循一定的规则,.NET 语言的程序可以相互使用其他 .NET 语言写的类;
    能够很容易集成不同编程语言生成的模块,.NET 框架也被称为“语言无关”。

  • 提供平台调用特性(Platform Invoke,P/Invoke),允许 .NET 代码调用非 .NET 代码。
    .NET 框架能与 COM 组件相互调用。

4.不需要COM

摆脱了COM的束缚

5.简化的部署

不需要使用注册表注册。
提供并行执行的特性,允许 DLL 不同版本在同一台机器上存在。

6.类型安全性

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

7.基类库

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

主要包括:

通用基础类

集合类

线程和同步类 - 用于创建多线程程序

XML类 - 用于创建、读写XML文档

1.3 编译成 CIL

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

程序集里的代码,不是本机代码,而是CIL(Common Intermediate Language,公共中间语言)的中间语言。

程序集 主要包含:

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

1.4 编译成本机代码并执行

程序集的 CIL 直到被调用运行时才会被编译成本机代码,运行时执行的步骤:
1.检查程序集的安全特性;
2.在内存中分配空间;
3.把程序集中的可执行代码发送给 JIT(Just-In-Time,即时编译器),把其中一部分内容编译为本机代码。

程序集中的可执行代码只在需要的时候由 JIT 编译,之后被缓存起来供后续使用。不被调用的代码不会被编译为本机代码,被调用的代码只会被编译一次。

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

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

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

编译和执行过程

源文件 → 编译器 → 程序集 → JIT编译器 → 本机代码 → 操作系统

1.5 CLR

CLR 是 .NET 框架的核心组件,位于操作系统的顶层,负责管理程序的执行、自动垃圾收集、安全和认证

1.6 CLI

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

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

主要组成部分:

1.CTS(Common Type System,公共类型系统)

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

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

2.CLS(Common Language Specification,公共语言规范)

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

1.7 各种缩写

Common Intermediate Language, CIL 公共中间语言

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

Common Type System, CTS 公共类型系统

Common Language Standard, CLS 公共语言规范

Common Language RunTime CLR 公共语言运行库

Garbage Collect,GC 垃圾收集器

Just-In-Time JIT 即时编译器

Base Class Library BCL 基类库

1.8 C# 的演化

C#最新版本 13.0,本书中 对应版本是7.0

1.9 C# 和 Windows 的演化

C#是一门优雅的语言

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

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

相关文章

Django全栈开发实战与架构思考

一、框架选型与开发范式 作为Python生态最成熟的Web框架,Django的"电池全包"理念在2.3版本后得到更彻底的贯彻。项目初期通过django-admin startproject生成的脚手架已包含: 自动化ORM迁移系统 内置Admin后台管理界面 基于WSGI的中间件管道…

微服务--Gateway网关

1. Gateway简介 Gateway网关是微服务架构中不可或缺的组件,是微服务架构中的统一入口,它作为所有客户端请求的第一道防线,负责请求的路由、过滤和聚合。 Gateway核心功能 路由(Routing) 根据请求路径、Header、参数等将请求路由到不同微服…

区块链与人工智能的融合:从信任到智能的IT新引擎

在信息技术(IT)的飞速发展中,两大颠覆性技术的交汇正掀起一场革命——区块链与人工智能(AI)的融合。2025年,随着数据隐私需求的激增、去中心化应用的爆发以及企业对可信智能系统的追求,区块链与…

Javascript什么是原型和原型链,八股文

原型:函数都有prototype属性,称之为原型,也称为原型对象 原型可以放一些属性和方法,共享给实例对象使用 原型可以做继承 原型链:对象都有__proto__属性,这个属性指向它的原型对象,原型对象也是对象,也有__proto__属性,指向原型对象的原型对象,这样一层一…

生日悖论理论及在哈希函数碰撞中的应用

目录 一、生日悖论(Birthday Paradox)介绍 二、生日悖论的数学解释 (一)计算所有人生日都不同的概率 数学推导 示例计算 (二)至少有两个人生日相同的概率 三、哈希函数碰撞与生日悖论的关系思考 &a…

探索数据的力量:Elasticsearch中指定链表字段的统计查询记录

目录 一、基本的数据结构说明 二、基本的统计记录 (一)统计当前索引中sellingProducts的所有类型 (二)检索指定文档中sellingProducts的数据总量 (三)检索指定文档中sellingProducts指定类型的数量统计…

细节致胜:如何重塑反向海淘用户体验

在反向海淘的激烈竞争中,客户体验已成为决定胜负的关键。一次流畅的购物旅程、一个贴心的服务细节,都可能让海外消费者成为品牌的忠实传播者。易境通代购商城系统正是以极致体验为核心,通过精细化服务管理,助力企业赢得用户口碑与…

Docker 分阶段构建

Docker 分阶段构建 Docker 分阶段构建(Multi-stage Build)是一种高效的镜像构建技术,允许在一个 Dockerfile 中使用多个构建阶段,每个阶段可以使用不同的基础镜像,最终只保留需要的文件,从而显著减小镜像体…

人工智能学习23-BP-图像编码

人工智能学习概述—快手视频 人工智能学习23-BP-图像编码—快手视频

k8s的开篇学习和安装

k8s的开篇学习 学习网站 参考资料 1。 K8S能干什么 [概述 | Kubernetes](https://kubernetes.io/zh-cn/docs/concepts/overview/#why-you-need-kubernetes-and-what-can-it-do)需要开代理 2。docker资料 https://docs.docker.com/get-started/3.prometheus资料 https://promet…

CS144 lab0: warmup

Lab 0: networking warmup 1. 环境 依赖配置 sudo apt update && sudo apt install git cmake gdb build-essential clang \clang-tidy clang-format gcc-doc pkg-config glibc-doc tcpdump tsharkg13配置 ppa中科大源 # deb https://ppa.launchpadcontent.net/ubu…

StarRocks

StarRocks 是一个高性能的 分布式 MPP(Massively Parallel Processing)数据库,主要用于 实时数据分析(Real-Time Analytics),是新一代的 OLAP 数据库,对标 ClickHouse、Apache Doris 等。 🌟 一、StarRocks 是什么? StarRocks 是一个面向实时分析场景、支持高并发、高…

8088单板机8259中断的软件触发测试

1.工作原理 8086和8088的中断设计的是很巧妙的,比如给8259的IR1配置了一个中断,中断号为21H,那么当真个引脚出现高电平的时候,就会触发相应上的中断响应。但,这不是唯一能够触发21H中断的方法,还可以通过软…

TC3xx中PFLASH缓存对XCP标定常量的影响

1、TC3xx中PFLASH缓存(Cache)对XCP标定的影响 XCP的映射用到TC3XX的Overlay功能需要使用一段Pflash内存。 Pflash数据有两个段区。分别为0x80000000和0xA0000000为起始地址的PFLASH段。 如上,两段数据的区别是一个段8有CACHE缓存,…

代码审计服务:如何解决误报与漏报难题,保障软件安全?

代码审计服务在保障软件质量、安全合规等方面扮演着关键角色,特别是在数字化浪潮席卷而来的今天,其重要性日益显著。它能揭露代码中的不足,进而为软件开发提供有力的效率和安全性保障。 误报与漏报难题 常规的代码审查工具,其错…

web方向第一次考核内容

一.考核内容 Web组大一下考核之HTML、CSS 1.为什么要清除浮动(4),清除浮动的方法有哪些?(6)(至少两种) 2.怎么实现左边左边宽度固定右边宽度自适应的布局?(10) 3.讲讲flex:1;(10) 4.怎么实现移动端适配不同…

HarmonyOS 5 Cordova有哪些热门插件?

以下是 HarmonyOS 5 环境下 Cordova 的热门插件及核心代码实现(综合实际开发场景高频使用): 一、核心工具类插件 1. ‌高性能图片压缩插件‌ ‌功能‌:直接调用鸿蒙 ImageSource API 实现硬件级加速压缩 ‌代码实现‌&#xff…

Cesium圆锥渐变色实现:融合顶点着色器、Canvas动态贴图与静态纹理的多方案整合

在Cesium中渲染圆锥体时,无论采用顶点着色器、Canvas动态贴图还是静态图片贴图,其渐变色均需满足以下条件: 圆形结构:渐变范围限定在圆锥底面的圆形区域内。径向扩散:颜色从圆心向外逐步变化(如红→黄→蓝…

周末复习1

质量管理包括质量规划,质量保证,质量控制。质量管理体系要定期执行内部审核和管理评审。二者都属于质量保证过程。 实施质量保证的方法很多,过程分析属于实施质量保证的常用方法。 采购管理过程包括编制采购计划,实施采购,控制采购和结束采购…

英飞凌亮相SEMICON China 2025:以SiC、GaN技术引领低碳化与数字化未来

在刚刚落幕的SEMICON China 2025上,全球半导体行业再度汇聚上海,共同探讨产业未来。本届展会以“跨界全球•心芯相联”为主题,覆盖芯片设计、制造、封测、设备及材料等全产业链,充分展现了半导体技术的最新突破与创新趋势。 作为…