C# 官方文件導讀及推薦書單

邊城 發表於 2022-01-27
C#
本文主要是希望幫助想學習 C# 和 .NET 技術棧的同學找到入門的途徑!

微軟在官方網站上提供了全套 C# 文件,提供從入門到精通的完全指導。

官方文件地址:自動/英文/中文

由於長期積累,C# 官方文件提供的內容較多,但比較雜亂,對初學者來說並不是很友好。而對已經學習了 C# 的人,作為參考和知識點查詢工具來說是非常有用的。但是,官方文件提供了最全、最詳細的學習內容,初學者可以跟隨導讀,在這裡學習 C# 的基礎知識。

對於初學者來說,可以從「C# 基礎知識」開始閱讀。

C# 基礎知識導讀

第一章 「入門」主要是對 C# 及其環境的介紹,通讀即可,不需要仔細去咀嚼。這一章提到的概念,大部分都會在「C# 程式設計指南」和「語言參考」部分找到詳細的描述。

其中,「C# 語言介紹」中介紹了 C# 和 .NET 體系結構。C# 和 .NET 密不可分。可以說,C# 就是為了 .NET 而發明的一種語言,所以在學習 C# 的同時,一定要了解 .NET。學任何一門語言,都有兩個重點:一是語法本身,二是支撐該語言的 API 庫(函式庫/類庫等)。.NET SDK 為 C# 提供了基礎而且全面的 API 庫。

「教程」部分主要通過兩種形式進行教學,「基於瀏覽器的教程」可以在瀏覽器上一步一步的瞭解 C# 開發的一些基本概念。但學完「基於瀏覽器的教程」之後,一定不要忽略了「在本地環境中工作」,這是實踐環節,是在真正的日常工作環境中編寫 C# 程式。這一部分介紹了基於命令列的 C# 專案操作和基於 Visual Studio 2019/2022 的 C# 專案操作,建議直接學習後者。基於 dotnet CLI 的部分了解即可,在後面學完 C#,深入 C# 構建技術和持續整合相關高階知識的時候再進行具體的學習。

第二章「基礎」部分需要通讀。這一部分的內容最好是每讀完一節都在 Visual Studio 或 dotnetfiddle.net 中進行實踐。其中「物件導向的程式設計」部分需要仔細閱讀,如果有 C++ 或 Java 的基礎,這一部分閱讀起來可能會輕鬆一些;如果沒有學過 OOP(Object Oriented Programming,物件導向程式設計)的同學,可以參照別的相關書箱或材料輔助閱讀理解。注意,這裡提到的「多形性」在多數書籍中叫作「多型性」。

「C# 中的新增功能」有興趣可以瞭解一下,這是 C#語言的發展歷史。這裡主要是針對學習過 C# 的程式設計師,提供快速瞭解新增語法和功能的途徑。

接下來的內容可以跳過,直到「C# 程式設計指南」。

C# 程式設計指南導讀

「C# 程式設計指南」部分相對完整地介紹了“程式設計”的基礎概念 和 C# 的語言特點和語法。這一章主要還是以介紹概念和理論為主,所以有一些東西如果不能理解,可以先記住,在後面的實踐中逐步去理解。

其中,按順序先通讀一遍「程式設計概念」部分,瞭解程式設計和 C# 程式設計的各種基本概念。在對“程式設計”和“C#”理解不夠深入的情況下,這部分內容理解和記憶可能都會比較困難,所以暫時不需要仔細研讀。在完成 C# 語言的學習之後,回頭再仔細閱讀一次「程式設計概念」部分,爭取結合所學的 C# 知識進行理解,並通過實踐(編寫程式碼)來鞏固。

在學習本章內容的時候,可能會有一些批向「規範」的參考連結不能開啟。沒有關係,這些內容在「語言參考」章節中也有。

C# 語言參考導讀

「語言參考」部分詳細的描述了 C# 的語法元素,學習手段同樣是閱讀並加以實踐。不過記住,這裡提供了各種程式碼片段,都只能讓閱讀者片面的去理解相應的語法。要做對 C# 語言的靈活應用,需要在實踐中去不斷的寫程式碼和優化程式碼。尤其是優化程式碼,是初學者最容易忽略的事情。寫程式碼就像寫文章一樣,每隔一段時間回頭去看,可能都會發現可以優化的地方 —— 這就說明自己在進步。所以有時候自己寫過的綜合練習程式碼(基礎練習就沒必要了,至少應該是一個邏輯完整的程式設計目標),不妨過一段時間再寫一次。

C# 是一門強型別語言,所以「型別」這一部分非常基礎,也非常重要。對值型別和引用型別的區別,建議結合計算機組成原理相關課程中的堆、棧的概念來理解。如果學過 C/C++,可以通過指標來理解引用。需要注意的是,C# 的引用和 C++ 的引用是兩個不同的概念 —— C# 的引用概念更像是去掉了計算能力的 C/C++ 指標;而 C# 函式引數中通過 refout修飾的引數,才更接近 C++ 引用的概念。

在學習語法的時候,你可能會發現部分語法其實是為開發者提供的便捷寫法,我們習慣上會稱之為“語法糖”。比如使用var來宣告變數就是一種語法糖,它可以讓開發者在宣告變數時寫更少的字元。不過語法糖通常有適用的情況,請一定注意其應用場景以及其所代表的真實意義,不要因為便捷就忽略其本質。

「關鍵字」主要是用於支撐語言特性,單純的學習關鍵字並不能達到很好的效果。建議瞭解關鍵字的使用者,並結合「C# 程式設計指南」中的相關概念進行理解。比如“訪問修飾符”涉及到命令空間、類和成員的可見性;abstractinterface涉及到 OOP 中的抽象概念;virtualoverride涉及到 OOP 的多型性等。也有一些關鍵字涉及到較為高深的語言特性,比如 externvolatile等,可以先了解,知道有這麼個東西,在學習和使用到相關高階特性的時候再來理解。

學習方法的時候要能夠理解到,方法也是一種函式,它可以和另外的函式表現形式對比/類比學習,比如委託和 Lambda。

學習運算子和表示式的時候要搞明白表示式和語句的區別,我們為什麼需要表示式?運算子和函式在表示式中起什麼作用?當然別忘了去學習運算子的優先順序。要完全的記住運算子優化級可能會有些困難,但是請記住運算子優先順序表的位置,備查;也別忽略了一對小括號 () 在明確運算優先順序時有著舉足輕重的作用。

小結

所謂語言,其實涉及的內容並不是很多,無非就是各種程式設計概念所對應的語言特性和語法。對於大部分程式語言來說,語言基礎無非都是常量、變數、表示式、函式和語句,以及程式導向的程式(順序、分支、迴圈)和麵向物件的程式(介面、類和物件)。

任何語言都會有一套標準庫,也會有一些慣用庫。比如 C++ 有 cstdlib/stdlib.h、STL (Standard Template Library ),還有 Boost 等;Java 有 JDK 等。而 C# 的標準庫由 .NET 提供,而 .NET 又分為 .NET Framework、.NET Core 和 .NET 5+ 幾個架構分類。建議直接使用 Visual Studio 最新版本(目前是 2022)或次新版本(目前是 2019),並基於 .NET 6 或 .NET 5 來實踐。由於 .NET 5/6 相對較新,能找到的書籍還不多,可以找 .NET Core (建議 3.0+)相關的書箱來類比學習,他們之間的差異不是很大。

越來越多的語言體系都提供了 API 倉庫,比如 Java 有 Maven,JavaScript 有 npm 等。C# 所屬的 .NET 體系提供了 NuGet 倉庫,在這裡可以找到各種各樣的庫,用來加速程式開發。但是在實際使用的時候應該注意測評和篩選,選擇合適且生態健康的的庫。

在學習了 C# 基礎之後,建議看兩本綜合性的 C# 程式設計書箱,熟悉 C# 在專案中的使用,尤其是在 ASP.NET 中的使用。深入學習的過程不要忘了把工具用好,Visual Studio 是 C# 開發最好用的工具,一定要善於發現、總結和分享 IDE 的使用技巧,瞭解 IDE 的功能和優秀的擴充套件(外掛),熟練掌握常用快捷鍵,把 IDE 打造(配置)成適合自己的高效率開發工具。

附:推薦書單

以下書籍在噹噹、京東等商城都可以找到。由於軟體開發技術日新月異,請儘量閱讀最新版本,避免把精力浪費在一些已經過時或者已經更新過的技術上。當然有時間的時候去了解一下技術發展是有益的,但這不是初學階段的重點。

  • 《C#入門經典:更新至C# 9和.NET 5》
  • 《CLR via C#(第4版)》
  • 《ASP.NET Core 3高階程式設計(第8版)》
  • 《深入淺出 ASP.NET Core》