.NET体系架构

引言

.NET是由微软开发的一个广泛应用的开发平台,旨在帮助开发者构建各种类型的应用程序,包括桌面应用、Web应用、移动应用和云服务。最初,.NET平台的构建主要集中在Windows环境上,但随着.NET Core和随后.NET 5及以上版本的推出,.NET已经发展成一个跨平台的开发框架,支持Windows、Linux和macOS等操作系统。

本文将介绍.NET体系架构的核心概念、组成部分,以及它如何支持跨平台应用的开发,并结合最新的技术演进,特别是.NET Core以及.NET 8.0和.NET 9.0的特点。

.NET架构概述

.NET的架构基于分层设计,包括以下几个关键组件:

  1. 公共语言运行时(CLR):它是.NET平台的核心,负责应用程序的执行管理、内存管理、垃圾回收、异常处理等基本功能。
  2. 类库(BCL):包括了一组基础类库,开发者可以使用这些库构建各种应用程序。
  3. 中间语言(IL):是.NET应用的中间代码,CLR将IL代码编译成与平台相关的机器码来执行。
  4. 跨语言互操作性:.NET通过标准化的公共语言规范(CLS)实现不同语言间的互操作性,确保不同编程语言编写的代码可以无缝协作。

在早期,.NET仅支持Windows平台,但随着.NET Core的推出,.NET逐步支持跨平台开发,使得开发者能够在多个操作系统中使用相同的代码库。

.NET的平台无关性

.NET平台的一个重要特点是平台无关性。早期,.NET框架主要依赖Windows操作系统,但随着.NET Core的诞生,这一平台无关性得到了显著扩展。借助.NET Core,开发者能够编写能够跨越多个操作系统(包括Windows、Linux、macOS)运行的应用程序。

这一变化得益于两项核心技术:

  1. 公共语言运行时(CLR):CLR不仅能在Windows上运行,也能够在其他操作系统上实现。这使得.NET代码能够在不同的硬件平台上执行,而无需修改源代码。

  2. 运行时适配器(CoreCLR):CoreCLR是.NET Core中的执行引擎,它作为跨平台版本的CLR,使得.NET能够在各种平台上运行。

 随着.NET 5的推出,微软将.NET Core与原先的.NET Framework进行了统一,现在.NET 6、7、8、9等版本进一步加强了对多平台的支持,提供了更高效、模块化的开发体验。

公共语言运行时(CLR)

CLR是.NET的核心组件之一,负责应用程序的运行时环境。它的主要任务包括:

  • 内存管理:CLR通过垃圾回收(GC)机制管理内存,自动释放不再使用的对象,避免了手动内存管理的复杂性。
  • 类型安全:CLR会在程序执行时对类型进行检查,确保类型的正确性,防止类型错误的发生。
  • 异常处理:CLR提供了一套统一的异常处理机制,帮助开发者处理运行时错误。

CLR的引入使得.NET平台能够保证高效且安全的代码执行,同时也是.NET实现语言互操作性的基础。

通用类型系统(CTS)

通用类型系统(CTS)是.NET中定义的一套规则,规定了不同编程语言之间如何定义和使用数据类型。CTS确保了.NET中不同语言编写的代码能够相互操作。它明确区分了值类型和引用类型。

  • 值类型:例如intstruct等类型,存储在栈中,每次赋值时都会复制其值。
  • 引用类型:例如classarray等类型,存储在堆中,赋值时复制的是引用,而非实际的对象数据。

CTS还定义了装箱和拆箱的机制,这使得值类型和引用类型能够在一定情况下互相转换。装箱(boxing)是将值类型转换为引用类型,拆箱(unboxing)则是将引用类型还原为值类型。

公共语言规范(CLS)

公共语言规范(CLS)是.NET框架中的一个关键概念,它规定了一套标准,使得不同编程语言能够互操作。通过遵循CLS,开发者可以确保自己编写的类库能够被其他遵循该标准的语言访问。

CLS的目标是解决不同语言之间的不兼容问题,使得.NET平台上的不同编程语言可以在同一个应用中协作。例如,C#、VB.NET和F#等语言都可以使用遵循CLS的类库,而不需要关心具体的语言实现。

语言的互操作性

.NET平台支持不同语言之间的互操作性,这意味着使用不同编程语言编写的代码可以相互调用和合作。例如,C#可以调用用VB.NET编写的代码,反之亦然。这一特性是通过公共语言运行时和公共语言规范的支持实现的。

这种互操作性使得开发者可以选择最适合特定任务的编程语言,而不会受到语言之间不兼容的限制。尤其是在企业环境中,开发团队通常会使用多种编程语言,.NET的互操作性可以极大地提高开发效率和代码复用率。

即时编译(JIT)与中间语言(IL)

.NET的编译机制采用了即时编译(JIT)和中间语言(IL)两种技术:

  • 中间语言(IL):.NET应用程序首先被编译成中间语言(IL),而不是直接编译成机器码。IL是与平台无关的,这使得.NET应用可以在不同的操作系统上运行。
  • 即时编译(JIT):在应用程序运行时,CLR会将IL代码即时编译为平台相关的机器码,执行时直接使用本地代码。

这种分阶段的编译机制使得.NET能够实现跨平台的灵活性,同时也能够在运行时进行优化。

基类库(BCL)

基类库(BCL)是.NET平台中提供的一组基础类库,涵盖了数据结构、文件I/O、网络通信、线程管理等常用功能。BCL是.NET平台的重要组成部分,它为开发者提供了大量的可复用代码,大大提高了开发效率。

BCL的内容不仅仅包含基础类库,还涵盖了LINQ、异步编程、JSON处理、Web API开发等功能,支持现代应用程序的多种需求。

跨平台支持:.NET Core与.NET 5及以上版本

在.NET的早期版本中,主要针对Windows平台进行优化,限制了跨平台开发的可能性。随着.NET Core的推出,微软彻底改变了这一局面。.NET Core不仅跨平台支持Linux和macOS,还具备更高的性能和模块化的架构。

.NET 5、6、7以及最新的.NET 8和9版本,进一步加强了对跨平台应用的支持,优化了性能和开发体验。例如,.NET 6引入了统一的跨平台API,.NET 7进一步提升了云原生应用的开发能力,而.NET 8和9则在性能、安全性以及云和容器环境下的支持方面做出了更多改进。

结论

.NET体系架构自诞生以来经历了多次重要的迭代,从最初仅支持Windows的框架到如今的跨平台、开源和云原生的强大平台,.NET的演变展示了其不断适应和引领技术趋势的能力。从CLR到BCL、从中间语言到即时编译,.NET的架构设计一直秉承着模块化、高效性和灵活性的原则,致力于为开发者提供一个高效、安全和可扩展的开发环境。

随着.NET Core的引入及后续版本的发布,.NET平台无疑已经成为现代软件开发中的一个重要力量,为开发者提供了一个跨平台、可持续发展的技术栈,满足了各种业务需求,从桌面应用到大规模的云服务,.NET都能提供强大的支持。

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

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

相关文章

Springboot——钉钉(站内)实现登录第三方应用

文章目录 前言准备1、创建钉钉应用,并开放网页应用2、配置网页应用各项参数发布版本 前端改造后端逻辑1、获取应用免登录 Access_token2、通过免登录 Access_token 和 Auth_Code 获取对应登录人信息 注意事项 前言 PC端的钉钉中工作台,增加第三方应用&a…

完美解决VMware 17.0 Pro安装ubuntu、Deepin等虚拟机后卡顿、卡死问题

这两天在 VM 17 Pro 中安装了ubuntu 24.1 和Deepin 23.9 等Linux操作系统,在使用过程中出现过数次卡顿、卡死问题,现记录整理解决方法如下: 一、问题描述 安装虚拟机时、以及安装完成后正常使用时出现鼠标点击卡顿、系统反应慢、卡死等问题…

计算机的错误计算(二百零七)

摘要 利用两个数学大模型计算 arccot(0.125664e2)的值,结果保留16位有效数字。 实验表明,它们的输出中分别仅含有3位和1位正确数字。 例1. 计算 arccot(0.125664e2)的值,结果保留16位有效数字。 下面是与一个数学解题器的对话。 以上为与…

Linux内核TTY子系统有什么(6)

接前一篇文章:Linux内核TTY子系统有什么(5) 本文内容参考: Linux TTY子系统框架-CSDN博客 一文彻底讲清Linux tty子系统架构及编程实例-CSDN博客 linux TTY子系统(3) - tty driver_sys tty device driver-CSDN博客 Linux TTY …

03_Redis基本操作

1.Redis查询命令 1.1 官网命查询命令 为了便于学习Redis,官方将其用于操作不同数据类型的命令进行了分类整理。你可以通过访问Redis官方网站上的命令参考页面https://redis.io/commands来查阅这些分组的命令,这有助于更系统地理解和使用Redis的各项功能。 1.2 HELP查询命令…

@LocalBuilder装饰器: 维持组件父子关系

一、前言 当开发者使用Builder做引用数据传递时,会考虑组件的父子关系,使用了bind(this)之后,组件的父子关系和状态管理的父子关系并不一致。为了解决组件的父子关系和状态管理的父子关系保持一致的问题,引入LocalBuilder装饰器。…

kubernetes第七天

1.影响pod调度的因素 nodeName 节点名 resources 资源限制 hostNetwork 宿主机网络 污点 污点容忍 Pod亲和性 Pod反亲和性 节点亲和性 2.污点 通常是作用于worker节点上,其可以影响pod的调度 语法:key[value]:effect effect:[ɪˈfek…

FFmpeg Muxer HLS

使用FFmpeg命令来研究它对HLS协议的支持程度是最好的方法: ffmpeg -h muxerhls Muxer HLS Muxer hls [Apple HTTP Live Streaming]:Common extensions: m3u8.Default video codec: h264.Default audio codec: aac.Default subtitle codec: webvtt. 这里面告诉我…

maven高级(day15)

Maven 是一款构建和管理 Java 项目的工具 分模块设计与开发 所谓分模块设计,顾名思义指的就是我们在设计一个 Java 项目的时候,将一个 Java 项目拆分成多 个模块进行开发。 分模块设计我们在进行项目设计阶段,就可以将一个大的项目拆分成若干…

【json】

JSON JSON是一种轻量级的,按照指定的格式去组织和封装数据的数据交互格式。 本质上是一个带有特定格式的字符串(py打印json时认定为str类型) 在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互,类似于计算机普通话 python与json关系及相互转换…

计算机网络 笔记 数据链路层 2

1,信道划分: (1)时分复用TDM 将时间等分为“TDM帧”,每个TDM帧内部等分为m个时隙,m个用户对应m个时隙 缺点:每个节点只分到了总带宽的1/m,如果有部分的1节点不发出数据,那么就会在这个时间信道被闲置,利用…

OpenPCDet从环境配置到模型训练

一、环境安装: 操作系统 :ubuntu 20.04+docker [11.8.0-cudnn8-devel-ubuntu18.04] 代码下载地址:GitHub - open-mmlab/OpenPCDet: OpenPCDet Toolbox for LiDAR-based 3D Object Detection.OpenPCDet Toolbox for LiDAR-based 3D Object Detection. - open-mmlab/OpenPCD…

【Python】Python与C的区别

文章目录 语句结束符代码块表示变量声明函数定义注释格式Python的标识符数据输入input()函数数据输出print()函数 语句结束符 C 语言 C 语言中每条语句必须以分号;结束。例如,int a 10;、printf("Hello, World!");。分号是语句的一部分,用于…

了解模2除法:原理与应用

模2除法,也被称为二进制除法或XOR除法,是一种在二进制数制下进行的特殊除法运算。与常规的十进制或其他进制的除法不同,模2除法使用异或(XOR)运算代替减法,并且不涉及进位或借位。这种除法运算在数字通信、…

【GESP】C++二级练习 luogu-B2079, 求出 e 的值

GESP二级练习,循环语句嵌套,难度★✮☆☆☆。 题目题解详见:https://www.coderli.com/gesp-2-luogu-b2079/ https://www.coderli.com/gesp-2-luogu-b2079/https://www.coderli.com/gesp-2-luogu-b2079/

鼠标自动移动防止锁屏的办公神器 —— 定时执行专家

目录 ◆ 如何设置 ◇ 方法1:使用【执行Nircmd命令】任务 ◇ 方法2:使用【模拟键盘输入】任务 ◆ 定时执行专家介绍 ◆ 定时执行专家最新版下载 ◆ 如何设置 ◇ 方法1:使用【执行Nircmd命令】任务 1、点击工具栏第一个图标【新建任务】&…

2025新年源码免费送

2025很开门很开门的源码免费传递。不需要馒头就能获取4套大开门源码。 听泉偷宝,又进来偷我源码啦👊👊👊。欢迎偷源码 🔥🔥🔥 获取免费源码以及更多源码,可以私信联系我 我们常常…

微信小程序实现登录注册

文章目录 1. 官方文档教程2. 注册实现3. 登录实现4. 关于作者其它项目视频教程介绍 1. 官方文档教程 https://developers.weixin.qq.com/miniprogram/dev/framework/路由跳转的几种方式: https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.switchTab…

1. Doris分布式环境搭建

一. 环境准备 本次测试集群采用3台机器hadoop1、hadoop2、hadoop3, Frontend和Backend部署在同一台机器上,Frontend部署3台组成高可用,Backend部署3个节点,组成3副本存储。 主机IP操作系统FrontendBackendhadoop1192.168.47.128Centos7Foll…

docker-compose安装canal并利用rabbitmq同步多个mysql数据

必看:本文默认已经安装好了docker-compose、rabbitmq、mysql并且mysql开启了binlog日志,不需要再安装; 流程图 如上图所示,左边是MQ模式流程图,右边则是TCP模式的流程图; 最终的目的是利用canal监听多个M…