.NET Core 實戰 — 手把手教你掌握 380個精彩案例

周家安

  • .NET Core 實戰 — 手把手教你掌握 380個精彩案例-preview-1
  • .NET Core 實戰 — 手把手教你掌握 380個精彩案例-preview-2
  • .NET Core 實戰 — 手把手教你掌握 380個精彩案例-preview-3
.NET Core 實戰 — 手把手教你掌握 380個精彩案例-preview-1

買這商品的人也買了...

商品描述

本書通過380個獨立且簡單的實例全面介紹了.NET Core的核心開發技術。全書分為三篇: 第一篇基礎知識(第1~7章),內容包括開發環境與應用程序項目管理、C#語言基礎、面向對象編程、數學運算與字符串處理、泛型與集合、LINQ與動態類型; 第二篇技術進階(第8~13章),內容包括文件與I/O、序列化、異步與並行、網絡編程、反射與Composition、加密算法; 第三篇ASP.NET Core(第14~17章),內容包括應用啟動、依賴註入與中間件、MVC與Web API、應用配置與數據庫訪問。 為了便於讀者學習,本書提供了所有實例的配套源代碼,在開發環境中運行,能直觀地看到每個實例的運行效果。本書適合作為普通高校.NET Core技術相關課程的教學用書,也可以作為相關培訓機構的培訓教材,還可作為從事.NET Core技術開發的IT從業者的參考用書。

作者簡介

周家安 微軟最有價值專家(MVP),擅長.NET及其相關開發技術,專注於探索簡單實用的編程學習方法。長期在博客園等技術社區撰寫.NET相關技術文章,並出版《C#6.0學習筆記——從第一行C#代碼到第一個項目設計(全程視頻課堂)》《Windows 10 應用開發實戰(第2版)》等原創技術圖書。 

目錄大綱

叢書序(沈向洋)1 
前言3 
第一篇基礎知識
第1章搭建開發與測試環境
1.1在Windows上安裝開發環境
實例1安裝Visual Studio 
實例2修復Visual Studio 
1.2在Linux操作系統中配置測試環境
實例3啟用Windows上的Linux子系統
實例4設置root密碼
實例5在Linux系統中安裝.NET Core SDK 
實例6在Linux系統中安裝.NET Core運行時
第2章應用程序項目管理
2.1.NET Core命令行工具的使用
實例7使用命令行工具創建.NET Core項目
實例8定義新項目的名稱與存放位置
實例9編譯應用程序項目
實例10編譯項目的Release版本
實例11創建解決方案文件
實例12枚舉或刪除解決方案中的項目
實例13運行應用程序
2.2Visual Studio開發環境
實例14使用Visual Studio創建項目
實例15在Visual Studio中運行項目
實例16顯示代碼行號
實例17在C# Interactive窗口中做代碼實驗
實例18在解決方案中添加和移除項目
實例19添加NuGet包引用
實例20清除NuGet包緩存
實例21保存窗口佈局
實例22給代碼打書籤
2.3代碼註釋
實例23單行註釋
實例24多行註釋
實例25文檔註釋
2.4發布.NET Core應用項目
實例26在Visual Studio中發布.NET Core應用
實例27使用Visual Studio發布可獨立運行的項目
實例28使用dotnet命令行工具發布“自包含”項目
第3章C#語言基礎
3.1命名空間
實例29使用namespace關鍵字
實例30嵌套命名空間
實例31引入命名空間
實例32在命名空間內部引入其他命名空間
實例33使用全局命名空間
實例34為引入的命名空間設置別名
實例35使用using static指令
3.2變量與常量
實例36一次性聲明多個變量
實例37讓編譯器自動推斷變量的類型
實例38使用常量
實例39獲取變量的內存地址
實例40輸出變量的名稱
實例41為變量分配默認值
3.3程序入口點
實例42獲取命令行參數
實例43處理多個入口點
3.4流程控制
實例44奇數還是偶數
實例45使用for循環輸出文本
實例46生成由字符組成的圖案
實例47死循環的處理方法
實例48退出循環的方法
實例49輸出20以內能被3整除的正整數
實例50做一道選擇題
實例51switch語句的類型匹配
實例52在case語句中使用when子句
實例53代碼跳轉
第4章面向對象編程
4.1類與結構
實例54聲明公共類
實例55為結構定義構造函數
實例56構造函數的相互調用
實例57靜態構造函數
實例58驗證屬性值的有效性
實例59初始化只讀字段
實例60重載方法
實例61類實例傳遞給方法後為什麼沒有被更改
實例62輸出參數
實例63可變個數的方法參數
實例64使用按引用傳遞的返回值
實例65按參數名稱來傳值
實例66可選參數
實例67在聲明時初始化屬性
4.2委託與事件
實例68委託實例如何綁定方法
實例69綁定多個方法
實例70匿名方法
實例71封裝事件
實例72框架提供的委託類型
實例73將方法作為參數進行傳遞
實例74使用Lambda表達式動態產生數據
4.3繼承與多態
實例75調用基類的構造函數
實例76重寫基類的成員
實例77徹底替換基類的成員
實例78實現多個接口
實例79實現接口的結構
實例80隱藏構造函數
實例81到底調用了誰
實例82析構函數
實例83實現IDisposable接口
實例84顯式實現接口
實例85阻止類被繼承
實例86嵌套類
實例87匿名類型
4.4枚舉
實例88聲明枚舉類型
實例89指定枚舉的基礎類型
實例90常量的標誌位運算
實例91自動產生的常量值
實例92獲取枚舉中常量的名稱
實例93檢查枚舉實例中是否包含某個標誌位
4.5特性
實例94自定義特性類
實例95向特性類的構造函數傳遞參數
實例96在同一對像上應用多個特性實例
實例97在運行階段檢索特性實例
實例98方法的返回值如何應用特性
4.6運算符
實例99計算一個整數的階乘
實例100按位平移
實例101是“大”還是“小” 
實例102typeof運算符的作用
實例103使用“ ”運算符將兩個對象的屬性值相加
實例104對null進行判斷
4.7類型轉換
實例105強制轉換
實例106將int數值隱式轉換為double數值
實例107輸出整數的二進製表示形式
實例108將字節數組轉換為字符串
實例109重寫ToString方法
實例110將整數轉換為十六進製字符串
實例111自定義隱式轉換
4.8可以為null的值類型
實例112訪問可以為null的值類型 
實例113為NullableT實例分配默認值
第5章數學運算與字符串處理
5.1簡單數學計算
實例114求一組整數中的最大值和最小值
實例115計算平均值
實例116計算一個數值的絕對值
實例117計算一個矩形序列的周長總和
實例118求某個角度的正弦值
實例119求某個數值的立方
實例120計算矩形的對角線長度
實例121處理超大整數
5.2日期/時間換算
實例122今天是星期幾
實例123獲取指定日期的農曆日期
實例124一天內總共有多少秒
實例125日期的加/減運算
實例126從日期字符串中產生DateTime實例
5.3常用的字符串處理
實例127使用Concat方法拼接字符串
實例128使用“ ”運算符拼接字符串
實例129字符串的包含關係
實例130字母的大小寫轉換
實例131使用分隔符連接字符串
實例132查找以“ay”結尾的單詞
實例133依據指定的分隔符來拆分字符串
實例134替換字符串
實例135反轉字符串
實例136插入與刪除字符
實例137填充剩餘“空白 ” 
實例138判斷字符是否為數字
實例139截取字符串
實例140使用StringBuilder組裝字符串
實例141字符串查找
實例142比較字符串時忽略大小寫
實例143“@”符號在字符串中的用途
實例144處理字符串中出現的雙引號
5.4格式控制符
實例145輸出百分比
實例146輸出當前語言中的貨幣格式
實例147輸出多個幣種格式
實例148數字的兩種常用格式
實例149使用字符串內插
實例150長日期與短日期
實例151自定義日期和時間格式
實例152自定義小數位數
5.5從字符串到其他類型的轉換
實例153從二進製字符串產生int實例
實例154Parse與TryParse方法
實例155對字符串進行UTF8編碼
實例156字符串的HTML編碼
實例157字符串隱式轉換為自定義類
第6章泛型與集合
6.1泛型
實例158使用泛型參數
實例159實現泛型接口
實例160限制泛型參數只能使用值類型
實例161泛型方法
實例162將泛型參數限制為枚舉類型
實例163泛型參數的輸入 輸出
實例164在委託類型中使用泛型
實例165將抽像類作為類型約束
6.2數組
實例166四種方式初始化數組實例
實例167創建二維數組
實例168使用簡化語法初始化多維數組
實例169使用Array類創建數組實例
實例170SetValue方法與GetValue方法
實例171獲取某個維度的元素個數
實例172動態調整數組的大小
實例173反轉數組
實例174查找符合條件的元素
實例175查找符合條件的元素的索引
實例176確定數組中元素的存在性
實例177複製數組中的元素
6.3集合
實例178將數字進行降序排列
實例179初始化ListT集合
實例180實現IEnumerator接口
實例181IEnumerable接口與foreach循環
實例182IEnumerableT與foreach循環
實例183IEnumerable接口與yield return語句
實例184無重複元素的集合
實例185雙向鍊錶
實例186自定義相等比較
實例187清空集合中的所有元素
實例188判斷字典集合中是否存在某個鍵
實例189定義索引器
實例190帶多個參數的索引器
實例191使用泛型的棧隊列
實例192自動排序的字典集合
實例193自定義SortedDictionary集合的排序規則
實例194“先進先出”隊列
實例195自定義ToReadOnlyDictionary方法
實例196初始化字典集合的方法
實例197ArrayList的使用
實例198使用SpanT提升處理字符串的性能
實例199多個Task同時操作ConcurrentBag集合
實例200跨線程訪問BlockingCollection集合
6.4元組
實例201Tuple類的使用
實例202推薦使用的元組——ValueTuple 
實例203C#語法中的ValueTuple 
實例204重命名元組的字段
實例205將元組解構為變量
實例206解構自定義類型
實例207將元組作為返回值
第7章LINQ與動態類型
7.1常見的擴展方法
實例208求最大值與最小值
實例209求工序列表中最長的加工週期
實例210計算字符串的總長度
實例211合併兩個序列
實例212有多少個矩形的面積超過100cm2
實例213按員工年齡進行降序排列
實例214去掉重複的元素
實例215篩選出兩個序列中的差異元素
實例216處理First方法拋出的異常
實例217當序列中有且僅有一個元素時
實例218篩選出手機號以135或136開頭的聯繫人信息
實例219將對象轉換為字典集合
實例220將原始序列進行分組
7.2LINQ語法
實例221篩選能被5整除的整數
實例222求序列中元素的平方根並按降序排列
實例223select子句返回的內容
實例224按員工所屬部門分組
實例225“內聯”查詢
實例226處理查詢中的異常
實例227DefaultIfEmpty方法的作用
實例228使用LINQ將序列轉換為XML文檔
實例229將分組後的序列重新排序
實例230將字典集合轉換為字符串序列
實例231修改XML元素的內容
實例232使用並行LINQ 
實例233將XML轉換為元組
實例234生成帶命名空間的XML文檔
實例235添加命名空間前綴
7. 3動態類型
實例236通 ExpandoObject類創建動態實例
實例237以字典形式訪問ExpandoObject
實例238自定義的動態類型
實例239在自定義動態類型中直接定義成員
實例240模擬委託實例的調用
第二篇技術進階
第8章文件與I/O 
8.1目錄與文件
實例241創建目錄與文件
實例242修改文件的創建時間
實例243使用FileInfo類來創建文件
實例244判斷目錄是否已經存在
實例245向文件追加文本
實例246覆寫文件內容
實例247使用FileInfo類刪除文件
實例248以行的形式寫入文本
實例249重命名目錄
實例250通過ReadAllLines方法讀取文件中的所有行
實例251依據文件的大小排序
實例252枚舉磁盤驅動器
8.2流
實例253向內存流寫入內容
實例254將內存流中的內容轉換為字節數組
實例255從內存流中讀取內容
實例256使用StreamWriter類將文本寫入文件
實例257使用StreamReader類讀取文本文件
實例258調用Seek方法重新設置流的當前位置
實例259通過Position屬性更改流的當前位置
8.3壓縮 與解壓縮
實例260使用DeflateStream類壓縮文件
實例261創建Zip壓縮文檔
實例262使用GZipStream類壓縮文件
8.4內存映射文件
實例263讀寫內存映射文件
實例264將內存映射文件寫入磁盤文件
8.5命名管道
實例265實現本地進程之間的通信
實例266單向管道通信
第9章序列化
9.1簡單序列化方案
實例267二進制序列化
實例268使用DataContractSerializer類進行序列化
實例269將類型實例序列化為JSON格式
實例270在序列化時忽略某些字段
9.2XML序列化
實例271XmlSerializer與XML序列化
實例272自定義封裝集合類型成員的XML元素名稱
實例273自定義XML元素的名稱
實例274將類型成員序列化為XML特性
實例275自定義XML命名空間
實例276自定義數組類型成員的XML元素
9.3數據協定
實例277數據協定的簡單定義
實例278自定義協定的名稱
實例279不同的類型使用相同的數據協定
實例280將數據協定序列化為JSON 格式
實例281序列化數據協定時忽略某個成員
實例282改變數據協定成員的序列化順序
實例283保留實例引用
第10章異步與並行
10.1線程
實例284Sleep方法的妙用
實例285創建新線程
實例286啟動新線程並傳遞參數
實例287等待線程信號——ManualResetEvent 
實例288等待線程信號——AutoResetEvent 
實例289多個線程同時寫一個文件
實例290使用線程鎖
10.2並行任務
實例291啟動Task的三種方法
實例292帶返回值的Task 
實例293傳遞狀態數據
實例294串聯並行任務
實例295使用Parallel類執行並行操作
10.3異步等待語法
實例296聲明異步方法
實例297在Main方法中使用異步等待
實例298為每個線程單獨分配變量值
實例299保留異步上下文中的本地變量值
實例300取消並行任務
第11章網絡編程
11.1Socket通信
實例301簡單的TCP通信程序
實例302TcpListener與TcpClient
實例303使用UdpClient類開發簡單的聊天程序
11.2HTTP編程
實例304從Web服務器上下載圖片
實例305使用HttpClient類向Web服務器提交數據
第12章反射與Composition 
12.1反射技術
實例306獲取程序集中的類型列表
實例307獲取指定類型的成員列表
實例308獲取方法的參數信息
實例309通過反射調用構造函數
實例310通過反射調用靜態方法
實例311用Activator類創建類型實例
實例312檢測類型上所應用的自定義Attribute 
12.2Composition 
實例313安裝NuGet包——System.Composition 
實例314導出類型
實例315通過協定來約束導出類型
實例316導入多個類型
實例317導出元數據
實例318使用自定義類型來接收導入的元數據
實例319封裝元數據
實例320用抽像類來充當協定類型
第13章加密算法
13.1單向加密
實例321計算輸入字符串的MD5值
實例322使用SHA1算法校驗文件
13.2雙向加密
實例323使用AES算法加密和解密文本
實例324不需要初始向量的AES加密
實例325用RSA算法加密和解密數據
第三篇ASP.NET Core 
第14章應用啟動
14.1Web主機配置
實例326使用默認配置創建Web主機
實例327配置Web服務器的URL 
實例328使用Kestrel服務器組件
實例329配置Web項目的調試方案
14.2Startup 
實例330基於方法約定的Startup類
實例331使用IStartup接口定義Startup類
實例332無Startup啟動應用程序
14.3啟動環境
實例333使用非預定義環境
實例334使Startup類匹配啟動環境
第15章依賴注入與中間件
15.1服務
實例335枚舉應用程序中已添加的服務
實例336編寫服務類型
實例337理解服務的生命週期
15.2依賴注入
實例338實現SHA1計算服務
實例339Startup.Configure方法的依賴注入
實例340臨時訪問服務
15.3中間件
實例341以委託形式定義中間件
實例342定義中間件類
實例343帶參數的中間件
實例344IMiddleware接口的用途
實例345讓HTTP管道“短路” 
實例346中間件的分支映射
第16章MVC與Web API 
16.1Razor Web頁面應用
實例347自定義Razor頁的根目錄
實例348Razor頁面與頁面模型關聯
實例349Razor Page應用的路由映射
實例350通過@page指令設置Razor頁面的URL路由
實例351自定義頁面的handler方法
16.2MVC(模型框架視圖) 
實例352為全局路由字段分配默認值
實例353局部的URL路由
實例354自定義視圖文件的查找位置
實例355根據URL查詢參數返回不同的視圖
實例356自定義的控制器類
實例357阻止控制器中的方法被公開為Action方法
實例358重命名Action方法
實例359使用佈局頁
實例360_ViewStart視圖與_ViewImports視圖
實例361向視圖傳遞模型對象
實例362在控制器中接收服務列表的注入
實例363使用IFormCollection組件來提取form表單 數據
實例364在Web API中直接提取上傳的文件
實例365用部分視圖來顯示當前日期
實例366使用視圖組件
實例367在視圖中接收依賴注入
16.3靜態文件與目錄瀏覽
實例368訪問靜態文件
實例369開啟目錄瀏覽功能
實例370文件服務
第17章應用配置與數據庫訪問
17.1配置應用程序
實例371自定義環境變量的命名前綴
實例372使用JSON文件進行配置
實例373自定義命令行參數映射
實例374使用內存中的配置源
17.2選項類
實例375選項類的使用方法
實例376使用JSON文件來配置選項類
17.3實體框架
實例377為實體模型設置主鍵
實例378遷移實體並生成數據庫
實例379內存數據庫
實例380在應用程序運行期間創建SQLite數據庫