380個精選實例:一步步昇華成 .NET Core 大內高手
內容描述
本書特色
◎微軟資深MVP執筆撰寫
◎微軟全球執行副總裁沈向洋推薦
◎380個實用案例全方位展示.NET Core程式設計技術精要
內容簡介
Visual Studio號稱地表最強大的開發環境,但也是最龐大的系統。你也許想用的是Visual Studio的強大,但卻又想開發出如Ubuntu Linux或MacOS般的輕巧程式,有可能嗎?
.NET Core是你的答案。
微軟最新的核心元件.NET Core不但具有Visual Studio Community版本與生俱來的強大功能,更有精巧的.NET Core的核心,幫助你在最節省資源的情況下,快速輕巧開發出Visual Studio的各種程式,如C#、Web、主控台或MVC的網站架構等等。
本書所有內容均以實例的形式呈現,全書將近400個實例,每個實例都有完整的步驟及清楚的圖示,詳細說明完成實例專案的步驟,讀者可以直接動手實作,親自體驗程式設計的樂趣。讓你從零基礎,一躍成為微軟平台的開發大師。
全書分為三篇:
第一篇 基礎知識。有關開發環境的架設、基礎類型、流程控制、常用集合、LINQ 語法和物件導向思想等內容。
第二篇 技術進階。強化程式設計技能,此部分的實例包含檔案與目錄操作、基礎I/O、序列化/ 反序列化、網路與非同步程式設計、反射與加密演算法應用等內容。
第三篇 ASP.NET Core。此部分主要包含與Web 開發相關的實例,重點有關Web Host 初始化、中介軟體、依賴植入、應用設定、EF Core 等關鍵知識。
涵蓋以下內容:
在Windows上安裝Visual Studio Community最新版
在Linux安裝.NET Core SDK/Runtime
使用.NET Core命列行/IDE建立你的專案
C#的完整基礎,如流程控制,物件導向、資料型態
C#的進階使用,包括數學運算及字串處理、泛型及集合
LINQ的使用、I/O、流處理、文件處理、序列化
例外的處理、單步偵錯、平行處理
網路程式設計、反射及Composition、加密演算
完整的ASP.NET Core,web主機設定
MVC及Web API、JSON檔案
應用程式及資料庫的存取
適合讀者群:可作為.NET Core技術相關課程的教學用書,或從事.NET Core技術開發的IT從業者參考。
目錄大綱
序
前言
第一篇 基礎知識
01 架設開發與測試環境
1.1 在Windows上安裝開發環境
實例1 安裝Visual Studio
實例2 修復Visual Studio
1.2 在Linux 作業系統中設定測試環境
實例3 啟用Windows 上的Linux 子系統
實例4 設定root 密碼
實例5 在Linux 系統中安裝.NETCore SDK
實例6 在Linux 系統中安裝.NETCore 執行時期
02 應用程式專案管理
2.1 .NETCore 命令列工具的使用
實例7 使用命令列工具建立.NETCore 專案
實例8 定義新專案的名稱與儲存位置
實例9 編譯應用程式專案
實例10 編譯專案的Release 版本
實例11 建立方案檔案
實例12 列舉或刪除方案中的專案
實例13 執行應用程式
2.2 Visual 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 發佈.NETCore 應用專案
實例26 在Visual Studio 中發佈.NETCore 應用
實例27 使用Visual Studio 發佈可獨立執行的專案
實例28 使用dotnet 命令列工具發佈「自包含」專案
03 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 做一道選擇題
實例51 switch 敘述的類型比對
實例52 在case敘述中使用when子句
實例53 程式跳躍
04 物件導向程式設計
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 是「大」還是「小」
實例102 typeof 運算子的作用
實例103 使用"+" 運算子將兩個物件的屬性值相加
實例104 對null 進行判斷
4.7 類型轉換
實例105 強制轉換
實例106 將int 數值自動轉型為double 數值
實例107 輸出整數的二進位表示形式
實例108 將位元組陣列轉為字串
實例109 重新定義ToString 方法
實例110 將整數轉為十六進位字串
實例111 自訂自動轉型
4.8 可以為null 的數值型態
實例112 存取可以為null的數值型態
實例113 為Nullable 實例分配預設值
05 數學運算與字串處理
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 截取字串
5.7 小結
實例140 使用StringBuilder 組裝字串
實例141 字串尋找
實例142 比較字串時忽略大小寫
實例143 "@" 符號在字串中的用途
實例144 處理字串中出現的雙引號
5.4 格式控制符
實例145 輸出百分比
實例146 輸出目前語言中的貨幣格式
實例147 輸出多個幣種格式
實例148 數字的兩種常用格式
實例149 使用字串內插
實例150 長日期與短日期
實例151 自訂日期和時間格式
實例152 自訂小數位數
5.5 從字串到其他類型的轉換
實例153 從二進位字元串產生int實例
實例154 Parse 與TryParse 方法
實例155 對字串進行UTF-8 編碼
實例156 字串的HTML 編碼
實例157 字串自動轉型為自訂類別
06 泛型與集合
6.1 泛型
實例158 使用泛型參數
實例159 實現泛型介面
實例160 限制泛型參數只能使用數值型態
實例161 泛型方法
實例162 將泛型參數限制為列舉類型
實例163 泛型參數的輸入與輸出
實例164 在委派類型中使用泛型
實例165 將抽象類別作為類型約束
6.2 陣列
實例166 四種方式初始化陣列實例
實例167 建立二維陣列
實例168 使用簡化語法初始化多維陣列
實例169 使用Array 類別建立陣列實例
實例170 SetValue 方法與GetValue方法
實例171 取得某個維度的元素個數
實例172 動態調整陣列的大小
實例173 反轉陣列
實例174 尋找符合條件的元素
實例175 尋找符合條件的元素的索引
實例176 確定陣列中元素的存在性
實例177 複製陣列中的元素
6.3 集合
實例178 將數字進行降冪排列
實例179 初始化List 集合
實例180 實現IEnumerator 介面
實例181 IEnumerable 介面與foreach循環
實例182 IEnumerable 與foreach循環
實例183 IEnumerable 介面與yieldreturn 敘述
實例184 無重複元素的集合
實例185 雙向鏈結串列
實例186 自訂相等比較
實例187 清空集合中的所有元素
實例188 判斷字典集合中是否存在某個鍵
實例189 定義索引子
實例190 帶多個參數的索引子
實例191 使用泛型的堆疊佇列
實例192 自動排序的字典集合
實例193 自訂SortedDictionary 集合的排序規則
實例194 「先進先出」佇列
實例195 自訂ToReadOnlyDictionary方法
實例196 初始化字典集合的方法
實例197 ArrayList 的使用
實例198 使用Span 提升處理字串的效能
實例199 多個Task 同時操作ConcurrentBag 集合
實例200 跨執行緒存取
BlockingCollection 集合
6.4 元組
實例201 Tuple 類別的使用
實例202 推薦使用的元組—ValueTuple
實例203 C# 語法中的ValueTuple
實例204 重新命名元組的欄位
實例205 將元組解構為變數
實例206 解構自訂類型
實例207 將元組作為傳回值
07 LINQ 與動態類型
7.1 常見的擴充方法
實例208 求最大值與最小值
實例209 求工序清單中最長的加工週期
實例210 計算字串的總長度
實例211 合併兩個序列
實例212 有多少個矩形的面積超過100cm2
實例213 按員工年齡進行降冪排列
實例214 去掉重複的元素
實例215 篩選出兩個序列中的差異元素
實例216 處理First 方法拋出的例外
實例217 當序列中有且僅有一個元素時
實例218 篩選出手機號以135 或136開頭的連絡人資訊
實例219 將物件轉為字典集合
實例220 將原始序列進行分組
7.2 LINQ 語法
實例221 篩選能被5 整除的整數
實例222 求序列中元素的平方根並按降冪排列
實例223 select 子句傳回的內容
實例224 按員工所屬部門分組
實例225 「內聯」查詢
實例226 處理查詢中的例外
實例227 DefaultIfEmpty 方法的作用
實例228 使用LINQ 將序列轉為XML 檔案
實例229 將分組後的序列重新排序
實例230 將字典集合轉為字串序列
實例231 修改XML 元素的內容
實例232 使用平行LINQ
實例233 將XML 轉為元組
實例234 產生帶命名空間的XML檔案
實例235 增加命名空間字首
7.3 動態類型
實例236 透過ExpandoObject 類別建立動態實例
實例237 以字典形式存取ExpandoObject
實例238 自訂的動態類型
實例239 在自訂動態類型中直接定義成員
實例240 模擬委派實例的呼叫
第二篇 技術進階
08 檔案與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 單向管線通訊
09 序列化
9.1 簡單序列化方案
實例267 二進位序列化
實例268 使用DataContractSerializer類別進行序列化
實例269 將類型實例序列化為JSON格式
實例270 在序列化時忽略某些欄位
9.2 XML 序列化
實例271 XmlSerializer 與XML 序列化
實例272 自訂封裝集合類型成員的XML 元素名稱
實例273 自訂XML 元素的名稱
實例274 將類型成員序列化為XML特性
實例275 自訂XML 命名空間
實例276 自訂陣列類型成員的XML元素
9.3 資料協定
實例277 資料協定的簡單定義
實例278 自訂協定的名稱
實例279 不同的類型使用相同的資料協定
實例280 將資料協定序列化為JSON格式
實例281 序列化資料協定時忽略某個成員
實例282 改變資料協定成員的序列化順序
實例283 保留實例參考
10 非同步與平行
10.1 執行緒
實例284 Sleep 方法的妙用
實例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.1 Socket 通訊
實例301 簡單的TCP 通訊程式
實例302 TcpListener 與TcpClient
實例303 使用UdpClient 類別開發簡單的聊天程式
11.2 HTTP 程式設計
實例304 從Web 伺服器上下載圖片
實例305 使用HttpClient 類別向Web伺服器傳送資料
12 反射與Composition
12.1 反射技術
實例306 取得程式集中的類型清單
實例307 取得指定類型的成員列表
實例308 取得方法的參數資訊
實例309 透過反射呼叫建置函數
實例310 透過反射呼叫靜態方法
實例311 用Activator 類別建立類型實例
實例312 檢測類型上所應用的自訂Attribute
12.2 Composition
實例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.NETCore
14 應用啟動
14.1 Web 主機設定
實例326 使用預設設定建立Web主機
實例327 設定Web 伺服器的URL
實例328 使用Kestrel 伺服器元件
實例329 設定Web 專案的偵錯方案
14.2 Startup
實例330 以方法約定為基礎的Startup類別
實例331 使用IStartup 介面定義Startup 類別
實例332 無Startup 啟動應用程式
14.3 啟動環境
實例333 使用非預先定義環境
實例334 使Startup 類比對啟動環境
15 相依植入與中介軟體
15.1 服務
實例335 列舉應用程式中已增加的服務
實例336 撰寫服務類型
實例337 了解服務的生命週期
15.2 相依植入
實例338 實現SHA1 計算服務
實例339 Startup.Configure 方法的相依植入
實例340 臨時存取服務
15.3 中介軟體
實例341 以委派形式定義中介軟體
實例342 定義中介軟體類別
實例343 帶有參數的中介軟體
實例344 IMiddleware 介面的用途
實例345 讓HTTP 管線「短路」
實例346 中介軟體的分支對映
16 MVC 與Web API
16.1 Razor Web 頁面應用
實例347 自訂Razor 頁的根目錄
實例348 Razor 頁面與頁面模型連結
實例349 Razor Page 應用的路由對映
實例350 透過@page 指令設定Razor頁面的URL 路由
實例351 自訂頁面的handler 方法
16.2 MVC( 模型- 架構- 檢視)
實例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 資料庫
作者介紹
周家安
微軟最有價值專家(MVP),擅長.NET及其相關開發技術,專注於探索簡單實用的程式設計學習方法。長期在博客園等技術社群撰寫.NET相關技術文章。