Python 開發人員學習 C# 的藍圖
C# 和 Python 共用類似的概念。 如果已經認識 Python,這些熟悉的概念可協助您學會 C#。
- 物件導向:Python 和 C# 都是物件導向語言。 即使語法不同,Python 類別的所有概念皆適用於 C#。
- 跨平台:Python 和 C# 都是跨平台語言。 以任一語言撰寫的應用程式,皆可在許多平台上執行。
- 記憶體回收:兩種語言都透過記憶體回收採用自動記憶體管理。 執行階段會從未參考的物件中回收記憶體。
- 強型別:Python 和 C# 都是強型別語言。 型別轉換不會以隱含的方式發生。 差異稍後會說明,因為 C# 是靜態型別,而 Python 則是動態型別。
- 非同步 / Await:Python 的
async
和await
功能,直接受到 C# 的async
和await
支援啟發。 - 模式比對:Python 的
match
運算式和模式比對,類似於 C# 的 模式比對switch
運算式。 您可以用它們檢查複雜的資料運算式,判斷它是否符合模式。 - 陳述式關鍵字:Python 和 C# 共用許多關鍵字,例如
if
、else
、while
、for
等等。 雖然並非所有語法都相同,但如果您懂 Python,兩者的相似性就足以幫助您看懂 C#。
開始學 C# 時,您會學習 C# 與 Python 之間差異的這些重要概念:
- 縮排 vs. 權杖:在 Python,新行和縮排是第一類的語法元素。 在 C#,空白字元並不重要。 權杖,例如
;
個別陳述式,以及其他權杖{
,以及if
和其他區塊陳述式的}
控制區塊範圍。 然而,為了可讀性,大部分編碼樣式 (包括這些文件中使用的樣式),都是使用縮排來強化{
和}
所宣告的區塊範圍。 - 靜態型別:在 C#,變數宣告包含其型別。 將變數重新指派給不同型別的物件,會產生編譯器錯誤。 在 Python,型別可以在重新指派時變更。
- 可為 Null 的類型:C# 變數可以是可為 Null 的或不可為 Null 的。 不可為 Null 的型別,屬於不能是 Null (或 Nothing) 的型別。 它一向是指有效物件。 相較之下,可為 Null 的型別可能參考有效的物件或 Null。
- LINQ:構成語言整合查詢 (LINQ) 的查詢運算式關鍵字,在 Python 並非關鍵字。 不過,
itertools
、more-itertools
和py-linq
這類 Python 程式庫提供類似的功能。 - 泛型:C# 泛型使用 C# 靜態類型,就提供給型別參數的引數進行判斷提示。 泛型演算法可能必須指定引數型別必須滿足的限制式。
最後,Python 有一些 C# 沒有的功能:
- 結構 (鴨子) 型別:在 C#,型別有名稱和宣告。 除了 Tuple 之外,結構相同的型別無法交換。
- REPL:C# 沒有可快速原型化解決方案的 Read-Eval-Print 迴圈 (REPL)。
- 重要的空白字元:您必須正確使用大括弧
{
和}
備註區塊範圍。
如果您懂 Python,就能順利踏上 C# 學習之旅。 這些語言的概念和慣用語相似。