.NET相關知識點分享一
第一章 .NET Core入門
1 .NET 為什么要跨平臺?
A. 安全考慮(Linux開源)
B. 成本原因(Windows收費)
C. 軟件生態(tài)(服務器軟件生態(tài)優(yōu)先在Linux)
2 .NET Framework和.NET Core的區(qū)別?
- 跨平臺支持:
- .NET Framework:最初是為Windows平臺設計的,因此只能在Windows操作系統(tǒng)上運行。
- .NET Core:專注于跨平臺支持,并且可以在Windows、macOS和Linux等多種操作系統(tǒng)上運行。
- 開源性:
- .NET Framework:在過去是封閉源代碼的,但在后來的版本中,微軟提供了部分源代碼的訪問權限。
- .NET Core:是一個完全開源的項目,其源代碼可在GitHub上公開訪問。
- 支持的應用類型:
- .NET Framework:主要用于開發(fā)Windows桌面應用程序、ASP.NET Web Forms和ASP.NET MVC等Web應用程序。
- .NET Core:可用于開發(fā)跨平臺的桌面應用程序、Web應用程序、移動應用程序以及云服務等。
- 版本控制:
- .NET Framework:以版本號形式進行更新,例如.NET Framework 3.5、4.0、4.5等。
- .NET Core:在某個時間點之后,經(jīng)歷了版本變化,并逐漸演變?yōu)?NET 5、.NET 6等,最后演進為.NET 6和更高版本。
- 部署方式:
- .NET Framework:應用程序依賴于特定版本的.NET Framework,需要在目標機器上安裝相應的.NET Framework版本才能運行。
- .NET Core:應用程序可以包含自身所需的.NET Core運行時,因此無需在目標機器上單獨安裝.NET Core。
- 性能:
- .NET Framework:由于歷史原因,性能方面可能不如.NET Core,并且較舊版本可能會有性能問題。
- .NET Core:專注于性能優(yōu)化,因此通常在性能方面表現(xiàn)更好。
- 后續(xù)發(fā)展:
- .NET Framework:自.NET Core的推出后,微軟將其定義為“永久不會再有新的版本”,并且未來的新功能主要集中在.NET Core和后來的.NET 5及更高版本。
- .NET Core:最終與.NET 5合并為.NET 5,并成為.NET平臺的未來發(fā)展方向。這個新的.NET平臺統(tǒng)一了之前的.NET Framework和.NET Core,形成一個統(tǒng)一的、跨平臺的.NET生態(tài)系統(tǒng)。
3 .NET Standard是什么?
? .NET Standard是一種規(guī)范,規(guī)定了.NET Framework和.NET Core等共同實現(xiàn)的一組API,它不是一個框架,只是一種規(guī)范。從.NET 5開始,微軟不再更新.NET Standard,而是把.NET 5、.NET 6等視為單一的代碼庫,在編譯和運行時來檢查不同平臺所支持的功能差異。
4 .NET Core項目結構的創(chuàng)新之處?
.csproj 文件的區(qū)別:A. .NET Framework里,項目中的所有代碼文件都要添加到*.csproj文件,如果某個沒有添加到,這某個代碼文件就不會被編譯。
B. .NET Core項目中的代碼文件不用添加到*.csproj文件里,而是默認都被自動包含到項目中,除非手動排除。
第二章 .NET Core 重難點知識
2.1 異步編程
2.1.1 什么是異步編程?有啥用處?
例子:“異步點餐” 說明
對照“異步點餐”的例子,異步編程的優(yōu)點就是可以提高服務器接待請求的數(shù)量,但不會使得單個請求的處理效率變高,甚至有可能略有降低。
2.1.2 使用和編寫異步方法?
在調(diào)用異步方法的時候,一般都要加上await關鍵字。如果一個方法中有await關鍵字,那么該方法也必須修飾為async。
async修飾了方法后,在方法內(nèi)部直接返回int類型就行了,編譯器會幫助我們把int轉換為Task
2.1.3 async和await的原理?
async方法會被C#編譯器編譯成一個類,并根據(jù)await調(diào)用把方法切分成多個狀態(tài),對async方法的調(diào)用就會被拆分為若干次對MoveNext方法的調(diào)用。
2.1.4 async背后的線程切換
異步調(diào)用前的線程在異步等待期間會被放回線程池,等異步等待結束后,一個新的空閑線程會從線程池中被獲取,異步等待調(diào)用后續(xù)的代碼會在這個新的空閑線程中。
編譯器會把async拆分成多次方法被調(diào)用,程序在運行的時候會通過線程池中取出空線程執(zhí)行不同的MoveNext調(diào)用的方式來避免線程的“空等”,這樣就提升系統(tǒng)的并發(fā)處理能力。
2.1.5 為什么有的異步方法沒有async?
因為編譯器會把async方法編譯成類的緣故,這不僅會增加程序集的尺寸,而且運行效率一般也會比普通方法低。
對于使用async的異步方法,如果返回值是Task類型,我們可以直接用return結束方法的執(zhí)行,比如如果方法的返回值是Task
如果由于某些框架的限制,我們編寫的方法不能標注為async,那么在這個方法中就不能使用await調(diào)用異步方法。那么對于返回值為Task
2.1.4 CancellationToken的使用?
.NET Core中有很多異步方法中,有CancellationToken這個類型的參數(shù),可以通過它提前終止異步方法。
2.1.5 WhenAll、WhenAny等方法的使用
await Task.WhenAll(t1,t2,t3); 同時等待多個Task的執(zhí)行結束。
對應接口或者抽象類中的方法是不能修飾為async,但這些方法仍然可以把返回值設置為Task對象,在實現(xiàn)類中為方法添加async修飾。
2.2 LINQ
2.2.1 LINQ是什么?有啥用?本質是啥?
LINQ是.NET Core中提供的簡化數(shù)據(jù)查詢的技術。LINQ關鍵的功能是提供了集合類的擴展方法,所有實現(xiàn)了IEnumerable
2.2.2 LINQ能做什么?
A. 數(shù)據(jù)過濾 Where
B. 獲取數(shù)據(jù)條數(shù) Count
C. 判斷是否至少有一條滿足的數(shù)據(jù) Any
D. 獲取一條數(shù)據(jù) Single、SingleOrDefault、First、FirstOrDefault
E. 排序 OrderBy、OrderByDescending
F. 限制結果集(主要用于分頁查詢,例如:從第2條開始獲取3條數(shù)據(jù),list.Skip(2).Take(3);)
G. 聚合函數(shù) Max、Min、Average、Sum和Count,可以和前面的配合使用
H. 分組 GroupBy
I. 投影 Select,用于把集合中的每一項的數(shù)據(jù)類型進行轉換。
J. 集合轉換 IEnumerable
上述方法均可被鏈式調(diào)用!!!
2.2.3 LINQ另一種寫法
除了上述的“方法語法外”,還有一種“查詢語法”的寫法。
C#編譯器會把“查詢語法”編譯成“方法語法”,運行時沒有區(qū)別。但是推薦“方法語法”。
第三章 .NET Core核心基礎組件
3.1 依賴注入
3.1.1 什么是控制反轉?有什么有用處?
控制反轉就是把“我要創(chuàng)建對象”,變成“我要對象”。控制反轉是設計模式中非常重要的思想,而依賴注入(DI)是控制反轉思想的一種重要的實現(xiàn)方式。
依賴注入簡化了模塊的組裝過程,減小了模塊之間的耦合度。
3.1.2 實現(xiàn)控制反轉的兩種方式是什么?
一、服務定位器
二、依賴注入
3.1.3 .NET依賴注入的基本使用
.NET Core內(nèi)置了控制反轉機制,它同時支持依賴注入(主要)和服務定位器兩種方式。(Microsoft.Extensions.DependencyInjection)
知道:
1、注冊服務:“生命周期”的概念(3種:瞬態(tài)、范圍和單例);分別指定服務類型和實現(xiàn)類型(可相同可不同)
2、獲取服務的時候必須指定獲取什么類型的服務。
使用時:
1、創(chuàng)建 用于注冊服務的容器:容器的接口IServiceCollection(里定義了3種不同“生命周期”的范圍服務),默認實現(xiàn)類使用ServiceCollection類注冊服務
2、使用IServiceCollection的BuildServiceProvider創(chuàng)建對象

浙公網(wǎng)安備 33010602011771號