.NET相关知识点分享一

第一章 .NET Core入门

1 .NET 为什么要跨平台?

A. 安全考虑(Linux开源)

B. 成本原因(Windows收费)

C. 软件生态(服务器软件生态优先在Linux)

2 .NET Framework和.NET Core的区别?

  1. 跨平台支持:
    • .NET Framework:最初是为Windows平台设计的,因此只能在Windows操作系统上运行。
    • .NET Core:专注于跨平台支持,并且可以在Windows、macOS和Linux等多种操作系统上运行。
  2. 开源性:
    • .NET Framework:在过去是封闭源代码的,但在后来的版本中,微软提供了部分源代码的访问权限。
    • .NET Core:是一个完全开源的项目,其源代码可在GitHub上公开访问。
  3. 支持的应用类型:
    • .NET Framework:主要用于开发Windows桌面应用程序、ASP.NET Web Forms和ASP.NET MVC等Web应用程序。
    • .NET Core:可用于开发跨平台的桌面应用程序、Web应用程序、移动应用程序以及云服务等。
  4. 版本控制:
    • .NET Framework:以版本号形式进行更新,例如.NET Framework 3.5、4.0、4.5等。
    • .NET Core:在某个时间点之后,经历了版本变化,并逐渐演变为.NET 5、.NET 6等,最后演进为.NET 6和更高版本。
  5. 部署方式:
    • .NET Framework:应用程序依赖于特定版本的.NET Framework,需要在目标机器上安装相应的.NET Framework版本才能运行。
    • .NET Core:应用程序可以包含自身所需的.NET Core运行时,因此无需在目标机器上单独安装.NET Core。
  6. 性能:
    • .NET Framework:由于历史原因,性能方面可能不如.NET Core,并且较旧版本可能会有性能问题。
    • .NET Core:专注于性能优化,因此通常在性能方面表现更好。
  7. 后续发展:
    • .NET Framework:自.NET Core的推出后,微软将其定义为“永久不会再有新的版本”,并且未来的新功能主要集中在.NET Core和后来的.NET 5及更高版本。
    • .NET Core:最终与.NET 5合并为.NET 5,并成为.NET平台的未来发展方向。这个新的.NET平台统一了之前的.NET Framework和.NET Core,形成一个统一的、跨平台的.NET生态系统。

3 .NET Standard是什么?

​ .NET Standard是一种规范,规定了.NET Framework和.NET Core等共同实现的一组API,它不是一个框架,只是一种规范。从.NET 5开始,微软不再更新.NET Standard,而是把.NET 5、.NET 6等视为单一的代码库,在编译和运行时来检查不同平台所支持的功能差异。

4 .NET Core项目结构的创新之处?

.csproj 文件的区别:A. .NET Framework里,项目中的所有代码文件都要添加到*.csproj文件,如果某个没有添加到,这某个代码文件就不会被编译。

B. .NET Core项目中的代码文件不用添加到*.csproj文件里,而是默认都被自动包含到项目中,除非手动排除。

第二章 .NET Core 重难点知识

2.1 异步编程

2.1.1 什么是异步编程?有啥用处?

例子:“异步点餐” 说明

对照“异步点餐”的例子,异步编程的优点就是可以提高服务器接待请求的数量,但不会使得单个请求的处理效率变高,甚至有可能略有降低。

2.1.2 使用和编写异步方法?

在调用异步方法的时候,一般都要加上await关键字。如果一个方法中有await关键字,那么该方法也必须修饰为async。

async修饰了方法后,在方法内部直接返回int类型就行了,编译器会帮助我们把int转换为Task;否则需要直接创建Task的返回对象。

2.1.3 async和await的原理?

async方法会被C#编译器编译成一个类,并根据await调用把方法切分成多个状态,对async方法的调用就会被拆分为若干次对MoveNext方法的调用。

2.1.4 async背后的线程切换

异步调用前的线程在异步等待期间会被放回线程池,等异步等待结束后,一个新的空闲线程会从线程池中被获取,异步等待调用后续的代码会在这个新的空闲线程中。

编译器会把async拆分成多次方法被调用,程序在运行的时候会通过线程池中取出空线程执行不同的MoveNext调用的方式来避免线程的“空等”,这样就提升系统的并发处理能力。

2.1.5 为什么有的异步方法没有async?

因为编译器会把async方法编译成类的缘故,这不仅会增加程序集的尺寸,而且运行效率一般也会比普通方法低。

对于使用async的异步方法,如果返回值是Task类型,我们可以直接用return结束方法的执行,比如如果方法的返回值是Task,我们直接return 5,编译器会把它们转换成Task对象。但是如果不用async的异步方法,需要我们手动创建Task对象。

如果由于某些框架的限制,我们编写的方法不能标注为async,那么在这个方法中就不能使用await调用异步方法。那么对于返回值为Task类型的异步方法,可以在Task类型对象上调用Result属性或者GetAwaiter().GetResult来等待异步方法执行结束后1获取返回值;对于Task类型对象上调用Wait方法来调用异步方法并等待任务执行结束。【不过这种调用方式不推荐,因为会阻塞调用线程,导致系统的并发能力下降,甚至会出现死锁】

2.1.4 CancellationToken的使用?

.NET Core中有很多异步方法中,有CancellationToken这个类型的参数,可以通过它提前终止异步方法

2.1.5 WhenAll、WhenAny等方法的使用

await Task.WhenAll(t1,t2,t3); 同时等待多个Task的执行结束。

对应接口或者抽象类中的方法是不能修饰为async,但这些方法仍然可以把返回值设置为Task对象,在实现类中为方法添加async修饰。

2.2 LINQ

2.2.1 LINQ是什么?有啥用?本质是啥?

LINQ是.NET Core中提供的简化数据查询的技术。LINQ关键的功能是提供了集合类的扩展方法,所有实现了IEnumerable接口的类都可以使用这些方法。

2.2.2 LINQ能做什么?

A. 数据过滤 Where

B. 获取数据条数 Count

C. 判断是否至少有一条满足的数据 Any

D. 获取一条数据 Single、SingleOrDefault、First、FirstOrDefault

E. 排序 OrderBy、OrderByDescending

F. 限制结果集(主要用于分页查询,例如:从第2条开始获取3条数据,list.Skip(2).Take(3);)

G. 聚合函数 Max、Min、Average、Sum和Count,可以和前面的配合使用

H. 分组 GroupBy

I. 投影 Select,用于把集合中的每一项的数据类型进行转换。

J. 集合转换 IEnumerable转换成数组类型和List类型。

上述方法均可被链式调用!!!

2.2.3 LINQ另一种写法

除了上述的“方法语法外”,还有一种“查询语法”的写法。

C#编译器会把“查询语法”编译成“方法语法”,运行时没有区别。但是推荐“方法语法”。

第三章 .NET Core核心基础组件

3.1 依赖注入

3.1.1 什么是控制反转?有什么有用处?

控制反转就是把“我要创建对象”,变成“我要对象”。控制反转是设计模式中非常重要的思想,而依赖注入(DI)是控制反转思想的一种重要的实现方式。

依赖注入简化了模块的组装过程,减小了模块之间的耦合度

3.1.2 实现控制反转的两种方式是什么?

一、服务定位器

二、依赖注入

3.1.3 .NET依赖注入的基本使用

.NET Core内置了控制反转机制,它同时支持依赖注入(主要)和服务定位器两种方式。(Microsoft.Extensions.DependencyInjection)

知道:

1、注册服务:“生命周期”的概念(3种:瞬态、范围和单例);分别指定服务类型和实现类型(可相同可不同)

2、获取服务的时候必须指定获取什么类型的服务。

使用时

1、创建 用于注册服务的容器:容器的接口IServiceCollection(里定义了3种不同“生命周期”的范围服务),默认实现类使用ServiceCollection类注册服务

2、使用IServiceCollection的BuildServiceProvider创建对象

posted @ 2023-08-16 09:21  不爱菠萝的菠萝君  阅读(92)  评论(0编辑  收藏  举报