01C#入门篇(D1_C#入门前的认知)

ops/2025/2/8 14:08:17/

目录

学习须知

学习路线

一、Dotnet

1. 了解C#之前,我们有必要先了解下Dotnet

2. Dotnet 发展历史: Framework ⇒ Core

2.1. .Net Framework(2002年)

1> 运行时(CLR)

2> CTS(通用类型系统)与CLS(通用语言规范)

CTS(Common Type System)通用类型系统

CLS(Common Language Specifition)公共语言规范

3> DotNET Framework 类库(FCL/BCL)

4> 语言&运行机制

2.2. .Net Core(2016年)

1> 统一的.NET框架

2> .NET Core体系结构

3> JIT、AOT编译

2.3. .NET Framework vs .NET Core

1> 对比 VS

2> 被遗弃的功能

3> 桌面开发能用.NET Core吗?

3. 还有一些概念了解一下?

3.1. 托管代码和非托管代码

3.2. .NET Standard(2016年)

3.3. .NET的ECMA标准

3.4. Mono/Xamarin

4. 查漏补缺

ASP.NET (2002年)

ASP.NET Core(2016年)

.NET 5/6/7/8/9

二、那么什么是 C# 编程?为什么选择C#?

1. 什么是 C# 编程?

2. 为什么选择C#?

三、C# 编程发展史

1. 诞生背景

2. 发展历程

四、使用C#编程的优势

五、C#的应用范围

六、C#语言之父

七、C# 常用开发工具

八、开发环境搭建

1. 安装 .Net 8

2. 安装 IDE: VisualStudio 2022 社区版

2.1. 安装地址

2.2. 安装时的选项

九、该如何规划C#学习流程?

1. 基础知识

1.1. 语法结构

1.2. 数据类型

1.3. 控制结构

1.4. 面向对象编程

2. 进阶特性

2.1. 泛型

2.2. LINQ

2.3. 异步编程

2.4. 事件和委托

2.5. 属性和索引器

3. 高级特性

3.1. 反射

3.2. 特性(Attributes)

3.3. 并行编程

3.4. 内存管理

3.5. 跨平台开发

4. 其它

1> 掌握常用的关键字,数据类型

2> 在线测试

3> 了解常见的数据结构

十、其它学习途径

代码整洁

教程:使用 ASP.NET Core 创建最小 API

学习 Orleans 框架

十一、参考文献


学习须知

注意:W哥Java开发转型兼容游戏开发过程中,目前正在快速学习C#,全部是套本人JavaSE专栏

模板,快速学习C#,大家不要见怪,能用AI快速上手,就用AI快速上手!

学习路线

2025 - 02 -05(开始Java开发转型兼容游戏开发之旅)

总体学习路线(先来个初步学习路线)

  • 先学c#基本语法
  • 然后学异步编程(核心)
  • 再学orleans框架(全是异步函数)
  • 最后看一看代码规范

一、Dotnet

1. 了解C#之前,我们有必要先了解下Dotnet

C# 是 Dotnet (即 .Net) 的重要组成部分,它是一种简单、现代、面向对象和类型安全的编程语言。

.NET 是由 Microsoft 创建的开发平台,平台包含了语言规范、工具、运行,支持开发各种应用,

如Web、移动、桌面等。

.NET的大部分内容都是用 C# 编写的,在学习 C# 之前,得需要了解一下什么是 .Net。

  • 后者是一款免费且开放源代码的平台,用于在 Windows、macOS、Linux、iOS 和 Android 上运行的应用程序。

.NET框架有多个实现,如 .NET Framework、.NET Core(及后续的.NET 5+版本),以及社区版

本 Mono。

即.Net 的生态包含但不限于以下平台:

  • .Net Framework 4.8
  • .Net Core 3.1
  • .NET 8

2. Dotnet 发展历史: Framework ⇒ Core

我们将要学习的 C# 版本和所选择 .Net 平台版本息息相关,这里,W哥再给大家简单梳理一

下.NET框架的发展历程:.NET Framework ⇒ .NET (Core)。

如下图所示:

刚接触 .Net 时难免对这些琳琅满目的名词一头雾水,所以需要优先了解一些概念:

除此以外,C#.NET体系还有很多概念,本小节就来简单了解下C#、.NET Framework、

CLR、.NETCore、CTS、JIT等概念。

推荐一个在线的版本,做的非常漂亮:(https://time.graphics/embed?v=1&id=593132)

2.1. .Net Framework(2002年)

.NET Framework 是 Microsoft 开发的第一个 .NET 平台,主要用于 Windows 操作系统上的应用程

序开发,它与 Windows 操作系统深度集成,仅支持 Windows 操作系统。

.NET Framework 是运行在 Windows 系列操作系统上的一个系统应用程序。

运行 .Net Framework 程序需要在目标机器上全局安装 .NET Framework,并且它不支持独立部

署,所有应用程序共享同一个 .NET 运行时版本

它是 .NET 的核心部分,提供了建立和运行 .NET 应用程序所需要的编辑、编译等核心服务。

它包括2个重要组成部分:公共语言运行时 (Common Language Runtime,CLR) 和 .NET 

Framework 类库(Framework Class Library,FCL)。

对于Framework

.NET Framework 设计之初就是基于Windows系统的,其API与Windows底层接口紧密关联,所以

DotNET应用也只能运行在Windows系统上了。

同时,.NET Framework 也作为Windows操作系统的组件内置在操作系统中。

同一台电脑上可以同时安装多个版本的 .NET Framework 版本。

.NET Framework = 运行时CLR + 类库FCL

为了解决跨平台的问题,早期是社区开源的 Mono,后来就是Mono 被微软收购后,统一实现并开

源了全新的.NET Core 框架。不过两者很多技术、概念是一样的。

1> 运行时(CLR)

公共语言运行时 (Common Language Runtime,CLR), CLR 本质上就是.NET 虚拟机(类似Java

的虚拟机JVM),算是.NET的引擎,用来执行托管.NET代码,确切的说是编译后的IL代码。

提供管理内存、线程执行、代码执行、代码安全验证、异常处理、编译、垃圾回收等运行时服务。

类加载器(Class Loader):加载程序集的类(包括方法)、元数据,及其他程序所需组件。

即时编译器JIT(Just-In-Time,简称JIT ):负责将中间代码MSIL翻译成本机执行代码(MSIL to 

NativeCode)。

代码管理器(Code Manager):管理代码的执行。

垃圾回收器GC(Garbage Collector):负责整个.NET运行时托管代码的内存分配与释放任务,它

通过一定的优化算法选择收集对象和时间,并进行自动的垃圾收集。

  • 安全引擎(Security Engine):提供基于认证的安全机制,如用户身份。
  • 调试引擎(Debug Engine):使开发者能调试和跟踪应用程序代码。
  • 类型检查器(Type Checker):检查并禁止非安全的类型转换以及未初始化的变量的使用。
  • 异常管理器(Exception Manager):提供结构化的异常处理,与Windows结构化异常处理机制(SHE)集成,改进了错误报告。
  • 线程支持(Thread Support):提供了多线程编程的类和接口。

CLR是 .NET 的核心,当我们学习了基本C#语法后,想要进一步进阶,就必须了解CLR的机制了。

2> CTS(通用类型系统)与CLS(通用语言规范)

.NET CLR是支持多种语言的,如C#、F#、VB等,这些语言编译后都可以在CLR上执行,还支持

不同语言的互操作,比如在C#类继承一个VB写的类,在C#中调用F#写的一个方法等。

实现这种不同语言之间交互的基础就是这些语言都遵循统一的规范和要求 —— CTS(通用类型系

统),CTS定义了一套通用的数据类型系统,包括值类型、引用类型的结构。

比如C#中int、VB中的Interger都是整形,对应CTS中的Int32。

CLS是CTS的子集,规定了语言编译器必须遵循的一组规则,以便创建在 CLR 中运行的 .NET 应

用程序。可以把CTS看做是规范,CLR是对CTS的具体实现。

CTS(Common Type System)通用类型系统

微软制定了一个正式的规范来描述类型的定义和行为,这就是通用类型系统

(Common Type System,CTS)。

所有.NET语言共享这一类型系统,实现它们之间无缝的互操作,比如可以在VB.NET中派生一个由

C#编写的类。

  • CTS 提供了2种类型:引用类型、值类型。
  • CTS 规范规定,一个类型可以包含零个或多个成员。这些成员包括:字段(Field)、属性(Property)、方法(Method)、事件(Event)。
  • CTS 指定了类型可见性规则以及类型成员的访问规则,private、public 等。
  • CTS 还为类型继承、虚方法、对象生存期等定义了相应的规则。
  • CTS 规定:所有类型最终必须从预定义的 System.Object 类型继承,这里包括值类型也是从Object继承而来的。

CLS(Common Language Specifition)公共语言规范

公共语言规范(https://learn.microsoft.com/zh-cn/dotnet/standard/language-independence)

(Common Language Specifition,CLS)是CTS的一个子集,从类型、命名、事件、属性等方面对

语言进行了共性的定义及规范。

CLS制定了一种以.NET平台为目标的语言所必须支持的最小特征,以及该语言与其他.NET语言之

间实现互操作性所需要的完备特征。

例如,CLS并不去关心一种语言用什么关键字实现继承,只是关心该语言如何支持继承。

CLS 遵从性的规则仅适用于组件的公共接口,而非其私有实现。CLS规范是提交给ECMA组织管理

的, 有关规则的完整列表,请参阅 ECMA-335 标准:公共语言基础结构。

符合 CLS 的类型

描述

Byte

8 位无符号整数

Int16

16 位带符号整数

Int32

32 位带符号整数

Int64

64 位带符号整数

Half

半精度浮点值

单精度

单精度浮点值

双精度

双精度浮点值

布尔值

true 或 false 值类型

Char

UTF 16 编码单元

小数

非浮点十进制数字

IntPtr

平台定义的大小的指针或句柄

字符串

零个、一个或多个 Char 对象的集合

3> DotNET Framework 类库(FCL/BCL)

类库(Framework Class Library,FCL)就是.NET Framework 内置的各种组件服务,如

ASP.NET、MVC、WCF和WPF等组件,满足不同编程应用场景的需求。

基础类库BCL(Base Class Library)是FCL的一个子集,顾名思义就是一些比较基础、通用的类

库,如基本数据类型、集合、线程、安全、字符串操作、网络操作、IO、XML操作等等,大多都包

含在System命名空间下,如System.Text、System.IO。

其他一些常用的名词,如核心 .NET 库、框架库、运行时库、共享框架,大多都指的是BCL。

// 这些都是DotNET内置的类库
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading.Tasks;

BCL作为FCL的基础,使用了CTS 数据类型和标准的应用程序格式编制,能被任何一种 .NET 编程语言的应用程序

所使用。

4> 语言&运行机制

.NET是为了支持多种语言而设计的,如Microsoft自己发布的VB.NET、Managed C++、C#、J#和

JScript.NET,还有其他厂商开发的语言,如Cobol、Smalltalk、Perl和 Eiffel等几十种编程语言。

无论使用哪种语言来编写源代码,都会通过编译器编译成中间代码MSIL(Microsoft Intermediate

Language)。

语言的集成性主要是公共语言规范(CLS)和通用类型系统(CTS)一起确保了语言的相互操作

性。

CLS是一个最低标准集,所有面向.NET的编译器都必须支持它,每个语言都符合这个规范,从而

满足了语言的互相调用和互操作。

.NET语言程序运行的逻辑如下图:

每种语言都有自己的编译器,将源代码编译成中间语言(MSIL,或IL),然后在CLR上运行,主

要分为两个阶段:

  • 编译阶段:由MSBuild把源代码编译为中间语言IL代码,编译后就是EXE、DLL格式的文件。
  • 运行阶段:CLR把中间语言CIL代码编译为平台专用的机器代码,最终在CPU上运行的就是机器码(汇编代码)。

Microsoft中间语言(MSIL),也称为通用中间语言(CIL/IL:Common Intermediate 

Language),是一组与平台无关的指令,在CLR中运行时由JIT按需编译为机器码执行。

下图为一个打印 hello world 的IL代码,通过内置工具 ildasm 可以查看。

2.2. .Net Core(2016年)

.NET Core是一个免费、跨平台、开源的开发平台,用于一站式构建不同类型的应用程序。

.NET Core 是以.NET Framework 为基础,但是经过重新设计、实现的的新一代框架,实现了

原.NETFramework 中的几乎所有功能,核心特点就是开源、跨平台,旨在提高应用程序的性能、

可移植性和可维护性

可以独立部署,应用程序包含所需的运行时和库,无需在目标机器上全局安装 .NET 运行时。

  • 开源,采用MIT和Apache协议作为开源协议,对商业十分友好。
  • 跨平台,支持Windows、MacOS、Linux,支持x64,、x86、ARM架构。

除了跨平台外,还有一大亮点就是采用模块化设计,通过 NuGet 包管理按需加载组件

(如 System.Text.Json),NuGet 很重要!

它是 .NET 生态系统的软件包管理器。

它允许开发人员轻松发现、安装和管理项目中的库和依赖项。

NuGet托管了一个庞大的软件包仓库,可以轻松集成到 .NET 应用程序中,提高生产力和可重用性

这是微软推出的新一代.NET框架,用来代替原有的 .NET Framework,核心特点就是开源、跨平

台,这也是.NET未来重点发展、投资的地方。

额外一系列知识补充:

开源,采用MIT和Apache协议作为开源协议,对商业十分友好。

跨平台,支持Windows、MacOS、Linux,支持x64,、x86、ARM架构。

友好通用,除了跨平台,.NET Core 通过 .NET Standard与.NET Framework、Xamarin和Mono兼

容,支持WEB、移动、桌面、微服务容器、云端Azure、物联网IOT、机器学习、游戏Unity等多种

应用开发模型。

支持多种语言,C#、VB、F#,基于一致的API标准模型——.NETStandard,使得不同语言的程序

集和库可共享通用。

现代高效:结合C#8+、VS2019+,提供现代化的语言框架、高效的开发体验。

高性能,根据 TechEmpowers发布的一份报告,.NET Core比其他同类框架都要快得多。

轻量,.NET Core可以打包在应用程序中,也可以安装在并行用户、机器范围内或服务器上,可以

部署在Docker容器中。

.NET Core 从 2016 年发布首个.NET Core1,后面陆续发布了.NET Core 2、.NET Core 3,及后续

的.NET6、.NET 7、.NET 8、.NET 9。

跳过了版本号 4.x,以避免与 .NET Framework 4.x 混淆。

从.NET 5开始,名称中删除了Core,以强调这是.NET未来的主要实现。

ASP.NET Core 5.0 基于 .NET 5.0,但保留名称Core以避免将其与 ASP.NET MVC 5 混淆。

同样,Entity Framework Core 5.0保留名称Core以避免将其与 Entity Framework5、Entity 

Framework6 混淆。

1> 统一的.NET框架

.NET框架体系经过多年发展,衍生了多个版本 —— 使用 .NET Framework 来构建 Windows 桌面

应用程序,使用 Xamarin 来构建 iOS 或 Android 应用程序,使用 .NET Core 来构建跨平台的 

Web 应用程序。

每一个框架都有自己的BCL、运行时CLR,长此以往,这也是造成如今.NET市场越来越差的原因

之一。

so,为解决这个问题,.NET Core就肩负了这个一统江湖的使命!

  • .NET 3 添加了对WinForm、WPF、EF的支持。
  • .NET 5 统一了Mono和.NET Core BCL的代码库。
  • 在.NET 6中,运行时和工具也统一了,完成了One .NET愿景。
  • .NET 7 统一了所有不同的 .NET 开发工具组件,使开发人员能够在相同的基础类库 (BCL)、运行时和编译器上构建所有类型的应用(桌面、移动、Web 等)。

从.NET 5,到.NET 7,统一的愿景基本已达成,一站式构建 Web、桌面和移动等应用,支持传统

的WPF、Winfrom(当然这两者只限于Windows系统),还引入了.NET Multi-platform App UI 

(.NET MAUI)作为Xamarin Forms的继任者。

2> .NET Core体系结构

运行时.NET Runtime有两种,CoreCLR,功能和.NET Framework的CLR差不多;.NET Native 

RunTime(CoreRT/NativeAOT)是直接将C#代码编译为机器码的运行时,还只是一个实验性的运

行时。

Core CLR 是一个跨平台的运行时,移植了 .NET Framework 的 CLR 的功能,包含核心程序库 

mscorlib、JIT 编译器、垃圾收集器 (GC) 以及其他运行 MSIL 所需要的运行期环境。

BCL/CoreFX,类库,即 Base Classlibrary 基础类,包含 File、System、Console、XML、

ADO.NET、日期时间等类库。Core FX就是.NET Core的BCL。

App Model,一站式构建 Web、桌面和移动等应用的模型。

3> JIT、AOT编译

通常情况下,我们写的C#代码被编译为中间代码IL,在运行期间由CLR的JIT编译器编译为机器码

执行。

这样势必造成运行的一些延迟,如果知道目标平台,则可以为该目标平台提前编译为机器码,这就

是所谓的提前

编译(AOT),它的优点是启动时间更快。

JIT(Just In Time Compiler,即时编译),顾名思义,在需要(运行代码)的时候才会被编译为

机器码。当然编译好后会被缓存,以便于后续执行,这也是为什么.NET程序预热后执行更快的原

因,不过程序关闭就没了。

AOT编译(Ahead of Time Compilation,预先编译或静态编译),在构建(发布)时将高级语言

编译为本地机器码,让程序更快的启动、运行。可以将.NET Core程序编译成原生(机器)代码,

不依赖 .NET 运行时而运行在宿主机器上。

CoreRT是应用了AOT编译的.NET本地运行时,是微软2014年推出的一项实验性技术,现在被库

runtimelab取代,是一个NativeAOT的实验性运行时。

不同于CoreCLR,CoreRT不是虚拟机,也没有生成和动态运行代码的能力,因为它不包括JIT。它

具有RTTI(运行时类型标识)和反射的能力,同时还具备垃圾回收(Garbage Collector)功能。

Core RT 会在不同的平台使用不同的 AOT 技术:

  • Windows 上使用的是 .NET Native。
  • macOS 与 Linux 上使用的是 LLILC (同时支持 JIT 和 AOT)。

2.3. .NET Framework vs .NET Core

1> 对比 VS

比较

.NET Core

.NET Framework

历史

2016年,.NET Core 是 .NET 的最新实现。

2002年,.NET Framework 是 .NET 的第一个实现

开源

完全开源

部分组件是开源的

维护团队

.NET基金会(.NET Foundation)

微软.NET团队

跨平台

支持跨平台,Windows,Linux和macOS

仅Windows平台

第三方支持

有大量的第三方包,但少于.NET Framework

历史悠久,有许多第三方软件包、库可用

应用内部署

支持In-app模式部署

需要单独安装SDK,不支持打包到应用内

移动开发

支持,Xamarin、MAUI

不支持

性能和可扩展性

更高性能和可伸缩性

一般,性能和可伸缩性方面效率较低

微服务实施

.NET Core 支持微服务的实现

不支持

REST 服务实现

可以使用 .NET Core 创建一个 REST API。

它支持 REST API 服务实现

何时使用

创建跨平台应用程序。- 要创建微服务,一定要使用 .NET Core。将应用程序部署到 Dockers 容器。创建高性能且可扩展的应用程序。并行运行多个 .NET 版本,请选择 .NET Core。如果你想要一个命令行界面(CLI)控制,那么.NET core是最好的选择。

仅在Windows平台上运行。好像不算理由。基于 WinForms 或 WPF 应用程序,.NET7已支持。WebForm、WCF,新项目没必要了,过时了。.NET Core 不支持的第三方包。不适用于 .NET Core 的 .NET 技术。要访问特定于 Windows 的 API,如注册表、WMI,Core有NUGET 包可用

2> 被遗弃的功能

.NET Framework 中有一些技术在 .NET 中已经废弃或调整了:

Windows相关API不支持:.NET Framework是深度集成Windows系统的,而.NET Core是跨平台

的,因此就有大量的系统相关的API不支持。

  • Windows 兼容性包的 Nuget包Microsoft.Windows.Compatibility提供了约 20,000 个 API,包括WCF、ACL、Windows加密、WMI、EventLog、注册表、Windows服务等,及一些跨平台 API。
  • Windows 注册表可通过Nuget查找Microsoft.Win32.Registry代替,其他如果在项目中发现缺少引用,请搜索 NuGet。
  • Web 浏览器控件:桌面开发中的浏览器控件,之前是基于IE内核的,已经过时。新提供的 Microsoft.Web.WebView2 可以通过Nuget获得。
  • 应用配置 App.config 升级为 appsettings.json,如果还想要用,则可添加System.Configuration.ConfigurationManager NuGet 包。
  • 应用程序域 (AppDomain) ,不支持创建其他应用域,也尚未计划在将来添加此功能。对于代码隔离,将流程或容器用作备用。若要动态加载程序集,请使用 AssemblyLoadContext 类。
  • .NET Remoting,.NET 6 及更高版本不支持 .NET 远程处理。对于简单的跨进程通信,可将进程间通信 (IPC) 机制视为远程处理的备用方案。对于跨计算机的通信,可将基于网络的解决方案用作备用方案。
  • 不支持 System.EnterpriseServices (COM+)。
  • 代码访问安全性,WPF for .NET 删除与 CAS 相关的代码,公开定义的 CAS 相关类型被移出 WPF 程序集,并移入了 Core .NET 库程序集中。
  • Windows Workflow Foundation (WF) 和 Windows Communication Foundation (WCF),在.NET 5 及更高版本不支持 WF 和 WCF, 有关替代方法,请参阅 CoreWF 和 CoreWCF。
  • 保存反射生成的程序集,.NET 6 及更高版本不支持保存由 System.Reflection.Emit API 生成的程序集,作为替代方法,请考虑 ILPack 库。

为了保障兼容性,.Net Core 依然是可以调用 .NET Framework 的库,只是如有有不支持的API或

依赖会抛出异常。

3> 桌面开发能用.NET Core吗?

开发服务端后台服务肯定是首选.NET Core的,那传统的的Windows桌面程序(WinForm、WPF)

呢?能不能用最新的.NET Core呢?—— 答案当然是可以的!

优点

可以使用更新的C#语法、.NET特性,提升开发效率。

性能提升明显。

可以打包运行库的依赖,不用单独安装运行库了。

WebView2,基于Edge的现代浏览器内核。

缺点

.NET Framework配套的第三方库比较丰富,可能没有.NETCore版本的。

对操作系统的兼容,.NETFramework4支持XP系统,Core最低支持Win7。

尽管 .NET Core 是跨平台的,但其 WPF、Wiform 仅在 Windows 上运行!

从 .NET Framework 升级到 .NET Core VS2022内置的升级工具,相关参考:

  • 如何将 WPF 桌面应用升级到 .NET 7
  • 如何将 Windows 窗体 桌面应用升级到 .NET 7
  • 从 .NET Framework 移植到 .NET,基本都可以兼容,99%的API都是一样的
  • 桌面指南 (WPF .NET)

不要升级 Visual Basic Windows 窗体项目。扩展似乎存在 bug!

3. 还有一些概念了解一下?

.NET应用:就是使用了.NET框架开发的应用程序,基于CLR运行。

Assembly:程序集,源代码编译的产出,一般表现为.DLL或者.EXE格式,必须依靠CLR才能顺利

执行。它们都是标准的PE格式的文件,主要包括PE(Portable Executable)头、CLR头(托管代

码的一些信息,如类型元数据)、IL代码、其他资源数据。

DLL:Dynamic Link Library,动态链接库,包含了已编译的C#代码、元数据和资源,可以在多个

应用程序之间共享和重用。

命令行 CLI是一种跨平台工具,用于开发、构建、执行发布 .NET 应用程序。是.NET Core SDK的

一部分,可以用dotnet指令来检查是否正确安装。

MSBuild (Microsoft Build Engine)是由Microsoft开发的构建工具和构建系统。它用于自动化软件项

目的构建过程,包括编译源代码、打包、运行测试、部署和生成文档等。使用 MSBuild,我们可以

构建Visual Studio项目和解决方案,而无需安装Visual Studio IDE。

3.1. 托管代码和非托管代码

托管代码(Managed Code)是指在受管理环境中运行的代码,通常指的是.NET语言(C#、VB)

开发的代码,在CLR运行时环境中运行。由CLR来负责内存管理、垃圾回收、类型安全性和异常处

理等任务,所以我们写(C#)托管代码时,就可以随意申明变量、创建对象,而不用去管内存的

分配、管理和回收,使得代码更容易编写、维护和调试。

Java也算一种托管代码

相对而言,非托管代码(Unmanaged Code)就是没有专门的执行管理环境,通常使用低级编程语

言(如C、C++)编写,开发人员需要手动处理内存管理、异常和资源释放等问题。

在实际的C#的开发中,我们也会经常用到非托管资源,如IO、文件流操作,就需要注意要手动释

放(非托管)资源,避免内存溢出。

3.2. .NET Standard(2016年)

.NET Standard是针对多个 .NET 框架 实现推出的一套正式的 .NET API 规范,目的是在多个 

.NET 框架间共享代码,如在.NET Framework 、 .NET、Mono间共享代码,提高 .NET 生态系统

中的一致性。

.NET Standard 是一组标准化的 API规范,“.NET Standard Library”指的也是这个API标准库,注意

只是一组规范,具体实现就是 .NET Framework、NET Core 和 Mono了,看看其源码就知道了。

所以:

.NET Standard 是针对跨平台框架的一种规范,在跨平台框架开发是才会涉及。

从 .NET 5 和 .NET 6 开始,微软就统一了所有平台、应用终端,不再需要 .NET Standard 了,它

以后不会更新了。

对于 .NET Framework,在4.5 版本才正式支持 .NET Standard 的规范, .NET Core 天生就支持

了。

总的来说,就是一句话:

它是一个规范(Specification),定义了所有 .NET 实现必须支持的 API 集合,而非具体实现。

.NET Core 和 .NET Framework 都是.NET Standard 的实现

(除实现 .NET Standard 外 .NET Core 和 .NET Framework 都有各自特有的实现)。

编写面向 netstandard2.0 的库,可在所有兼容平台复用,但从 .Net Standard 2.1 开始需

.NET Core 3.0+,不再支持 .NET Framework

3.3. .NET的ECMA标准

ECMA(European Computer Manufacturers Association,欧洲计算机制造商协会)是一个国际性

的标准化组织,致力于制定和推广信息和通信技术的标准。

.NET体系中的C#语言、公共语言基础(CLI)也是有标准规范的,参考Ecma 标准。.NET主要的

的规范标准包括:C# 语言标准(版本 6.0):ECMA-334.pdf

公共语言基础结构:ECMA-335.pdf,这也是CLR的标准。

CLI(Common Language Infrastructure)公共语言基础结构:是一系列规范标准的总称,包括

CTS、CLS、CIL、元数据、执行系统等多种规范,.NET、Mono就是他的实现,由国际标准组织

ECMA维护。

学习C#、CLR不需要去看上述规范,这个不适合,如果你是要自己实现一门高级语言,或写一个

C#编译器则可以去看看。

3.4. Mono/Xamarin

Mono 是另一个 .NET Framework 的跨平台开源版本,并不属于微软,而是由社区的力量所主导。

Mono 项目始于 2001 年,由Xamarin牵头维护 mono/mon,2016年Xamarin被微软收购,之后逐

步成为.NETCore的一部分。

Mono就像流落民间的王子,靠着乡亲们的力量慢慢成长,最后被国王召回,继承大统。

Mono 基于C#的ECMA标准和公共语言运行时(CLR),包括Mono运行时、C#编译器、类库和一

些附加工具。

Mono兼容.NET标准,并支持跨平台开发。可以在多个操作系统上运行,包括Linux、macOS和

Windows。

Mono比较流行的应用场景就是Unity游戏开发和移动端应用开发。

  • Unity游戏引擎使用Mono作为其脚本引擎的一部分,所以Unity游戏开发的主要语言就是C#。
  • Xamarin(杂么瑞):就是基于Mono,专门用来开发移动端App应用程序,实现一次开发多端应用。其继任

者是微软在.NET 7中推出的MAUI(maui /ˈmaʊɪ/ n.毛伊岛)。

4. 查漏补缺

ASP.NET (2002年)

ASP.NET是由微软在 .NET Framework 框架中所提供,开发 Web 应用程序的类别库,ASP.NET 

可以运行在安装了 .NET Framework 的服务器上。

很多人都把 ASP.NET 当做是一种编程语言,但它实际上只是一个由 .NET Framework 提供的一种

开发平台(development platform),并非编程语言。

也可认为 ASP.NET 是 .NET组件,任何 .NET 语言,例如 C#,可以引用该组件,创建网页或 

Web 服务。

ASP.NET Core(2016年)

ASP.NET Core 是新一代的 ASP.NET,早期称为 ASP.NET vNext,并且在推出初期命名为 

ASP.NET 5,但随着

.NET Core 的成熟,以及 ASP.NET 5 的命名会使得外界将它视为 ASP.NET 的升级版,但它其实

是新一代从头开始打造的 ASP.NET 核心功能,因此微软宣布将它改为与 .NET Core 同步的名称,

即 ASP.NET Core。

ASP.NET Core 可运行于 Windows 平台以及非 Windows 平台,如 Mac OSX 以及 Ubuntu Linux 

操作系统,是 Microsoft 第一个具有跨平台能力的 Web 开发框架。 (注意,当你选择.net 

framework 作为框架依赖,那么就无法跨平台了,当然如果是mono那当然是可以的吧) 。

注意 ASP.NET Core 从 3.0 开始 不再支持 .Net Framework 只依赖 .Net Core,.Net Core 3.0 实现

了 .NetStandrd 2.1, 与此同时任何版本的 .Net Framework 不支持 .Net Standrd 2.1,意图很明确,

大方向以后就是net core的趋势,微软定调了

.NET 5/6/7/8/9

.NET 5(2020年)通过将 .NET Core 和 .NET Framework 统一到一个平台中,标志着一个新时代

的开始.NET 6(2021年)实现了.NET 统一计划的最终目标:统一了SDK、基础库和运行时。它在

简化开发、提升性能和工作效率方面做出了显著改进。

.NET 7(2022年)继续关注性能,改进了应用程序启动、运行时执行和内存使用

.NET 8(2023年)更多性能优化,尤其是在文件 I/O、联网和数据处理方面

.NET 9(2024年)在性能方面的提升尤为显著,对运行时、工作负载和语言进行了1000多项与性

能相关的改进

二、那么什么是 C# 编程?为什么选择C#?

1. 什么是 C# 编程?

C#(读作“C Sharp”)是一种现代、面向对象的编程语言,由微软公司开发,旨在为.NET框架提供

支持。

它结合了C语言和C++的特点,同时吸取了Java等语言的优点。

2. 为什么选择C#?

再让我们看看官网的描述:

现在就让W哥开始带大家正式踏入C#编程学习之旅。

三、C# 编程发展史

1. 诞生背景

C#的诞生可以追溯到20世纪90年代。当时,随着Windows操作系统的普及,开发者需要一种高效

的编程语言来构建跨平台应用程序。微软希望创建一种语言,既能吸引C/C++开发者,又能方便

Java程序员。为了实现这一目标,微软在2000年左右启动了C#的开发。

2. 发展历程

  • 2002年:C# 1.0正式发布,与.NET框架一起推出。此版本引入了基本的面向对象特性、基本类型、数组等。开发者开始使用C#编写Windows应用程序,.NET框架提供了丰富的类库,支持快速开发。
  • 2005年:C# 2.0发布,增加了泛型、匿名方法和可空类型等新特性,提升了语言的灵活性和性能。泛型允开发者定义通用类型,提高代码复用性和类型安全性。此时,C#的流行程度开始迅速上升,成为企业开发的主流语言。
  • 2007年:C# 3.0推出,引入了LINQ(语言集成查询)和表达式树等特性,使得对数据的操作更加直观。LINQ的出现使得C#在处理集合、数据库和XML等数据源时更加简洁高效,极大地提升了开发效率。
  • 2010年:C# 4.0发布,增加了动态类型、命名参数和可选参数等功能,进一步增强了语言的表达能力。动态类型使得开发者能够在运行时确定类型,提高了灵活性。
  • 2012年:C# 5.0发布,支持异步编程(async/await),为开发高性能应用提供了更好的支持。通过异步编程,C#能够在I/O操作等耗时任务中保持应用的响应性,大大提升了用户体验。
  • 2017年:C# 7.0发布,加入了元组、模式匹配、局部函数和扩展方法等新特性,使得代码更加简洁。这一版本使得开发者能够以更加直观和灵活的方式编写代码,提高了开发效率。
  • 2020年:C# 8.0发布,增加了可为空引用类型、异步流、范围和索引等新特性。可为空引用类型帮助开发者减少空引用异常的风险,而异步流则使得异步编程变得更加易于使用。
  • 2021年:C# 9.0发布,提供了记录类型、init-only属性和顶级语句等新特性,使得数据处理更加简洁和高效。
  • 2022年:C# 10.0发布,进一步增强了语言的功能,例如全局using、文件范围的命名空间等特性,提升了代码的可读性和维护性。

C#的演变与.NET生态系统的发展密切相关,随着技术的进步,C#逐渐发展成为一种强大的编程语

言,广泛应用于桌面、Web和移动应用程序的开发。

四、使用C#编程的优势

  1. 市场需求大:随着国家对实体经济的重视,C#语言在工业自动化领域的需求量巨大。许多实体工厂都需要工业自动化软件开发人员,C#是这一领域的唯一开发语言
  2. 家乡就业机会多:虽然互联网行业在北京和深圳有大量机会,但在其他城市,C#智能制造开发的岗位竞争相对较小。三四线城市同样有大量的C#开发需求。
  3. 适合国企:许多国企,如银行系统、政府系统、石油系统以及各个研究院,都采用C#语言进行开发。掌握C#语言,进入国企的机会更多。
  4. 工作生活平衡:C#程序员的工作强度相对较低,加班情况较少,工作与生活能够较好地平衡。与其他编程语言相比,C#程序员的工作压力较小。
  5. 语法简洁易懂:C#语言的语法被认为是所有编程语言中最优美、最完美的。精通一门C#语言后,其他编程语言的学习也会变得更加容易。
  6. 性能高效:C#/.NET是目前效率最高的编程语言和框架之一。许多大型企业,如特斯拉、德国大众、BMW等,都将C#/.NET作为唯一的开发语言和平台。同时,国内也有大量相关岗位在招聘。

五、C#的应用范围

C#的适用范围非常广泛,以下是一些主要的应用领域:

  1. 桌面应用程序开发:C#是Windows平台上的主要开发语言,用于创建各种桌面应用程序,包括图形用户界面(GUI)应用、工具和实用程序等。
  2. 网络应用程序开发:C#可以用于开发Web应用程序,包括网站、Web服务、API等。使用ASP.NET和ASP.NET Core框架可以构建功能强大的Web应用程序。
  3. 移动应用程序开发:C#可以用于开发移动应用程序,包括Android、iOS和Windows Phone平台上的应用。使用Xamarin等跨平台工具可以实现共享代码和快速开发。
  4. 游戏开发:C#可以用于游戏开发,特别是使用Unity游戏引擎。Unity支持C#作为主要的脚本语言,用于编写游戏逻辑和交互。
  5. 云计算和大数据:C#可以用于开发云服务和大数据应用,包括与云平台集成、数据处理和分析等方面的开发。
  6. 物联网(IoT)应用开发:C#可以用于开发物联网应用程序,包括传感器数据采集、设备控制和远程监控等。
  7. 科学和工程计算:C#在科学和工程领域有广泛应用,用于数值计算、数据分析、仿真和建模等。

六、C#语言之父

在.NET Framework开发期间,其类库最初是使用一种被称为Simple Managed C(SMC/简单托管

C)的编译系统开发的。到了1999年初,安德斯·海尔斯伯格成立一个团队开发一个被称为Cool的

程序语言,名称取自“C-likeObject Oriented Language”, 微软曾经考虑过保留这个名字,但是由于

商标等原因在2000年七月的开发者大会上公布.NET项目时将名称改为C#。所以安德斯·海尔斯伯格

就成了C#之父,同时他也是C# 首席设计师和微软首席架构师。

七、C# 常用开发工具

C#常用的开发工具包括以下几种‌:

  1. ‌Visual Studio‌:这是微软公司推出的功能强大的集成开发环境(IDE),支持多种编程语言,其中C#是其主打语言之一。Visual Studio提供了丰富的功能,如代码编辑、智能感知、调试工具、性能分析以及与Azure等云服务的集成,极大地提升了开发效率‌。
  2. ‌Visual Studio Code‌:这是一个轻量级但功能强大的代码编辑器,支持C#等多种编程语言。通过安装C#扩展,可以实现智能感知、代码补全、调试等高级功能。Visual Studio Code适合需要轻量级开发环境的开发者‌23。
  3. ‌JetBrains Rider‌:这是一个跨平台的C# IDE,由JetBrains公司开发。它结合了IntelliJ IDEA和ReSharper的强大功能,提供全面的.NET开发支持,包括ASP.NET、Unity等项目类型。Rider适合需要跨平台开发和深度代码分析的开发者‌。
  4. ‌MonoDevelop‌:这是一个开源的跨平台IDE,支持Windows、macOS和Linux操作系统。MonoDevelop适合初学者入门,并提供C#代码提示、代码模板和代码折叠等功能‌。
  5. ‌SharpDevelop‌:这是一个免费开源的IDE,适合快速编写和调试C#代码。它提供了代码编辑、编译和调试等功能,是VS Code的轻量级替代品‌。
  6. ‌Git‌:作为分布式版本控制系统,Git是C#开发者不可或缺的工具。它允许开发者轻松管理代码版本,协同开发。Git的特点包括分布式架构、强大的分支管理和广泛的社区支持‌。
  7. ‌Azure DevOps‌:这是一个云基础的软件开发平台,提供项目管理、代码托管、构建和发布等功能。Azure DevOps适合需要云端开发和协作的团队。

八、开发环境搭建

1. 安装 .Net 8

  1. 在命令提示符处,键入 dotnet --version ,然后按 Enter 键。
  2. 如果电脑上安装了 .NET,此命令会显示版本号。请花点时间查看对
dotnet --version

命令的响应。如果收到错误消息,指出无法识别术语

dotnet

,则表示未安装 .NET SDK。如果安装了 .NET 版本,应会看到一条响应消息,其中列出了如下所

示的版本号:

`8.0.100`
  1. 如果未安装 dotnet,在下面链接中下载安装
    下载 .NET(Linux、macOS 和 Windows)
  2. 安装成功后,重新打开命令提示符,键入 dotnet --version 并观察输出结果
  3. 其他安装方式(有兴趣可以看):Install .NET on Windows - .NET | Microsoft Learn

2. 安装 IDE: VisualStudio 2022 社区版

当然你也可以考虑 Rider

2.1. 安装地址

下载安装的时候,注意vs2022的小版本号

(下载的版本号太旧也没事,安装以后让它检查更新即可)

下载地址:下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux

2.2. 安装时的选项

PS:如果是 win7,win8 只能安装 VS2019,而 vs2019 跑不了 .Net 8

九、该如何规划C#学习流程?

W哥其实系统学习过Java编程,对于C#学习流程,自然也有自己的一套学习方法论,接下来,就

让W哥带大家简单的了解 C# 编程的学习流程。(学习任何一门编程语言,若自己有基础,就要学

会借势,即参考,搭建个人知识体系库和代码库,仅此而已)

1. 基础知识

1.1. 语法结构

C#的基本语法与C/C++和Java类似,常见的结构包括:

  • 命名空间:用于组织代码,避免名称冲突。通过 namespace 关键字定义命名空间,可以将相关的类和接口放在一起。
namespace MyApplication
{class Program{static void Main(string[] args){// 代码逻辑}}
}
  • 类和对象:C#是一种面向对象的语言,类是对象的模板。使用class关键字定义类,可以包含字段、方法、属性等。
public class Car
{public string Model { get; set; }public int Year { get; set; }public void Start(){Console.WriteLine("Car is starting...");}
}
  • 方法:定义了类的行为,方法可以有参数和返回值。使用void关键字定义没有返回值的方法。
public int Add(int a, int b)
{return a + b;
}
  • 属性:封装了字段,并通过get/set访问,提供对类内部数据的安全访问。
private int _speed;
public int Speed
{get { return _speed; }set{if (value > 0)_speed = value;}
}

1.2. 数据类型

C#支持多种数据类型,包括:

  • 值类型:如intfloatchar等,存储实际数据,直接分配在栈上。
int age = 25;
float height = 5.9f;
  • 引用类型:如string、数组和对象,存储数据的引用,分配在堆上。
string name = "John";
int[] numbers = { 1, 2, 3, 4, 5 };
  • 可空类型:可以表示基本数据类型的null值,使用“?”后缀表示。
int? nullableInt = null;

1.3. 控制结构

C#提供了丰富的控制结构,包括:

  • 条件语句:如ifswitch,控制程序的执行流。
if (age >= 18)
{Console.WriteLine("Adult");
}
else
{Console.WriteLine("Minor");
}
  • 循环语句:如forwhileforeach,用于重复执行代码块。
for (int i = 0; i < 5; i++)
{Console.WriteLine(i);
}
  • 异常处理:使用try-catch-finally语句处理运行时错误。
try
{int result = 10 / 0;
}
catch (DivideByZeroException ex)
{Console.WriteLine("Error: " + ex.Message);
}

1.4. 面向对象编程

C#支持面向对象编程(OOP)的四大特性:

  • 封装:通过访问修饰符(public、private、protected等)控制数据访问,保护对象的内部状态。
public class Employee
{private string name;public string Name{get { return name; }set { name = value; }}
}
  • 继承:允许创建一个类作为另一个类的基础,支持代码重用。
public class Vehicle
{public void Drive() { }
}public class Car : Vehicle
{public void Honk() { }
}
  • 多态:通过方法重载和重写,实现不同类的对象可以使用相同的接口。
public class Animal
{public virtual void Speak(){Console.WriteLine("Animal speaks");}
}public class Dog : Animal
{public override void Speak(){Console.WriteLine("Bark");}
}
  • 抽象:通过抽象类和接口,定义不完整的类,强制派生类实现特定的方法。
public abstract class Shape
{public abstract double Area();
}public class Circle : Shape
{private double radius;public Circle(double r){radius = r;}public override double Area(){return Math.PI * radius * radius;}
}

2. 进阶特性

2.1. 泛型

泛型允许在类、方法和接口中定义占位符类型,使得代码更加灵活和可重用。通过使用泛型,可以在编译

时检查类型安全。

public class GenericList<T>
{private List<T> items = new List<T>();public void Add(T item){items.Add(item);}public T Get(int index){return items[index];}
}

2.2. LINQ

LINQ(语言集成查询)提供了一种通过C#语言直接查询数据的方式。它允许开发者使用类似SQL

的语法操作集合、数组、XML等数据源。

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var evenNumbers = from n in numberswhere n % 2 == 0select n;

2.3. 异步编程

C#的异步编程模型通过asyncawait关键字,使得处理I/O操作时,应用程序能够保持响应性,提

高用户体验。

public async Task<string> FetchDataAsync(string url)
{using (HttpClient client = new HttpClient()){return await client.GetStringAsync(url);}
}

2.4. 事件和委托

委托是一种类型安全的函数指针,可以用来定义回调方法。

事件是基于委托的高级封装,允许对象之间的解耦通信。

public delegate void Notify();  // 定义委托public class Process
{public event Notify ProcessCompleted;  // 定义事件public void StartProcess(){// 处理逻辑OnProcessCompleted();}protected virtual void OnProcessCompleted(){ProcessCompleted?.Invoke();  // 触发事件}
}

2.5. 属性和索引器

属性提供了一种简化对字段访问的方式,而索引器允许对象像数组一样被索引。

public class Employee
{private string[] departments = new string[10];public string this[int index]{get { return departments[index]; }set { departments[index] = value; }}
}

3. 高级特性

包含但不限于泛型、反射、Attribute、Lambda 表达式,都是项目中非常常用的技术,用到了再学

也行

3.1. 反射

反射允许在运行时检查类型的信息并动态调用方法。这对于构建插件架构和动态类型应用非常有

用。

Type type = typeof(Employee);
MethodInfo method = type.GetMethod("Start");
method.Invoke(new Employee(), null);

3.2. 特性(Attributes)

特性允许为类、方法和属性添加元数据,以便在运行时获取。可以通过自定义特性实现代码的扩

展。

[AttributeUsage(AttributeTargets.Class)]
public class DeveloperAttribute : Attribute
{public string Name { get; }public DeveloperAttribute(string name){Name = name;}
}[Developer("John Doe")]
public class MyClass
{// 类逻辑
}

3.3. 并行编程

C#提供了并行编程的支持,包括Parallel类和Task并发模型,使得开发者能够更有效地利用多核处理器。

Parallel.For(0, 100, i =>
{Console.WriteLine(i);
});

3.4. 内存管理

C#的垃圾回收机制自动管理内存分配和释放,降低了内存泄漏的风险。开发者可以使用

IDisposable接口和using语句显式释放资源。

public class Resource : IDisposable
{public void Dispose(){// 清理资源}
}// 使用
using (Resource res = new Resource())
{// 逻辑
}

3.5. 跨平台开发

随着.NET Core和后来的.NET 5/6的推出,C#已经支持跨平台开发。开发者可以在Windows、

Linux和macOS上构建和运行C#应用。

# 创建新的控制台应用程序
dotnet new console -n MyApp
# 运行应用
dotnet run

4. 其它

1> 掌握常用的关键字,数据类型

C# 教程 | 菜鸟教程

2> 在线测试

初期学习语法的时候,可以在线测试(微信扫码登陆即可):

https://lightly.teamcode.com/dashboard

下图里我写了个简单的异步程序,每秒打印一个数字,10秒后打印 hello world

PS:异步编程后面再学,这里只做展示。学异步编程前我们还要装好IDE,毕竟这个网页里编程的

时候没有代码提示

3> 了解常见的数据结构

  • Dictionary
  • HashSet
  • List
  • LinkedList
  • Queue
  • SortedList
  • SortedDictionay
  • ConcurrentDictionary

十、其它学习途径

代码整洁

编码约定对于在开发团队中维护代码可读性、一致性和协作至关重要。

遵循行业实践和既定准则的代码更易于理解、维护和扩展。

除了基本的命名风格,还有提到了代码规范,仔细看完:

GitHub - thangchung/clean-code-dotnet: :bathtub: Clean Code concepts and tools adapted for .NET

教程:使用 ASP.NET Core 创建最小 API

我们的服务器集群中,有用到Web Api,这里找到一个创建API项目的教程,有兴趣可以创建一个玩一下

教程:使用 ASP.NET Core 创建最小 API | Microsoft Learn

学习 Orleans 框架

我们服务器用到了这个框架,务必提前了解它,弄清楚什么是 Grain、什么是 Silo。

资料:

  • Orleans 的优势 - .NET | Microsoft Learn

  • GitHub - dotnet/orleans: Cloud Native application framework for .NET

十一、参考文献

参考文献

  • C#语言的历史与发展:从基础到高级的全面解析
  • .NET 体系概览图集- 2024 最全总结


http://www.ppmy.cn/ops/156743.html

相关文章

游戏引擎学习第87天

当直接使用内存时&#xff0c;可能会发生一些奇怪的事情 在直接操作内存时&#xff0c;一些意外的情况可能会发生。由于内存实际上只是一个大块的空间&#xff0c;开发者可以完全控制它&#xff0c;而不像高级语言那样必须遵守许多规则&#xff0c;因此很容易发生错误。在一个…

PySpark学习笔记5-SparkSQL

sparkSql的数据抽象有两种。 一类是data set适用于java和Scala 一类是data frame适用于java&#xff0c;Scala&#xff0c;python 将r d d转换为data frame #方式一 df spark.createDataFrame(rdd,schema[name,age]) #方式二 schema Structtype(). add(id,integertype(),nu…

GlusterFS源码讲解:如何实现最终一致性

引言 在分布式文件系统中&#xff0c;由于网络延迟、节点故障或临时分区原因&#xff0c;很难保证写操作在所有节点上立即生效。为了解决这一问题&#xff0c;很多系统采用最终一致性模型&#xff1a;写操作可能一开始没有同步到所有节点&#xff0c;但经过一段时间后&#xff…

【玩转全栈】--创建一个自己的vue项目

目录 vue介绍 创建vue项目 vue页面介绍 element-plus组件库 启动项目 vue介绍 Vue.js 是一款轻量级、易于上手的前端 JavaScript 框架&#xff0c;旨在简化用户界面的开发。它采用了响应式数据绑定和组件化的设计理念&#xff0c;使得开发者可以通过声明式的方式轻松管理数据和…

解锁高效 Web 开发新姿势:Open WebUI 安装指南

在 Web 开发的浩瀚宇宙里&#xff0c;找到一款强大又好用的框架&#xff0c;就如同拥有了超级外挂&#xff0c;能让开发效率直线飙升。 今天要给大家介绍的 Open WebUI&#xff0c;便是这样一款神器&#xff0c;它作为开源框架&#xff0c;助力开发者轻松搭建现代感十足、交互性…

C++,设计模式,【单例模式】

文章目录 一、模式定义与核心价值二、模式结构解析三、关键实现技术演进1. 基础版(非线程安全)2. 线程安全版(双重检查锁)3. 现代C++实现(C++11起)四、实战案例:全局日志管理器五、模式优缺点深度分析✅ 核心优势⚠️ 潜在缺陷六、典型应用场景七、高级实现技巧1. 模板化…

[LeetCode]day16 242.有效的字母异位词

242. 有效的字母异位词 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的 字母异位词 示例 1: 输入: s "anagram", t "nagaram" 输出: true示例 2: 输入: s "rat"…

ESP32开发学习记录---》GPIO

she 2025年2月5日&#xff0c;新年后决定开始充电提升自己&#xff0c;故作此记,以前没有使用过IDF开发ESP32因此新年学习一下ESP32。 ESPIDF开发环境配置网上已经有很多的资料了&#xff0c;我就不再赘述&#xff0c;我这里只是对我的学习经历的一些记录。 首先学习一个…