Python 开发者学习 C# 的路线图

C# 和 Python 具备类似的概念。 如果你已经了解 Python,这些熟悉的构造可以帮助你学习 C#。

  1. 面向对象:Python 和 C# 都是面向对象的语言。 Python 中类的所有概念都适用于 C#,即使语法不同也适用。
  2. 跨平台:Python 和 C# 都是跨平台语言。 使用这两种语言中的任意一种编写的应用都可以在许多平台上运行。
  3. 垃圾回收:这两种语言都通过垃圾收集来应用自动内存管理功能。 运行时从未引用的对象中回收内存。
  4. 强类型化:Python 和 C# 都是强类型化语言。 类型强制不会隐式发生。 后面会介绍一些差异,因为 C# 是静态类型,而 Python 是动态类型。
  5. Async / Await:Python 的 asyncawait 功能直接受到 C# 的 asyncawait 支持的启发。
  6. 模式匹配:Python 的 match 表达式和模式匹配类似于 C# 的模式匹配 switch 表达式。 可以使用这些功能来检查复杂数据表达式,以确定它是否与模式匹配。
  7. 语句关键字:Python 和 C# 有许多相同关键字,例如 ifelsewhilefor 等。 虽然并非所有语法都相同,但它们十分相似,如果你了解 Python,就可以阅读 C#。

开始学习 C# 时,你将学习以下重要概念,这些概念在 C# 与 Python 中的含义不同:

  1. 缩进与标记:在 Python 中,换行和缩进是一流的语法元素。 在 C# 中,空格并不重要。 标记,例如 ; 用于分隔语句,其他标记如 {} 用于控制 if 和其他块语句的块范围。 但是,为了便于阅读,大多数编码样式(包括这些文档中使用的样式)都使用缩进来强化 {}声明的块范围。
  2. 静态类型语言:在 C# 中,变量声明包括其类型。 将变量重新分配给不同类型的对象将生成编译器错误。 在 Python 中,在重新分配时,类型可能会发生更改。
  3. 可以为 null 的类型:C# 变量可为空不可为空。 不可为 null 的类型是不能为 null(或不包含任何类型)的类型。 它始终需要引用有效的对象。 相比之下,可以为 null 的类型可以引用有效对象或 null。
  4. LINQ:组成语言集成查询 (LINQ) 的查询表达式关键字与 Python 中的关键字不同。 但是,Python 库(如 itertoolsmore-itertoolspy-linq)具备类似的功能。
  5. 泛型:C# 泛型使用 C# 静态类型语言对类型参数提供的参数进行断言。 泛型算法可能需要指定参数类型必须满足的约束。

最后,有一些 Python 功能在 C# 中不可用:

  1. 结构化(鸭子)语言类型:在 C# 中,类型具有名称和声明。 除元组外,具有相同结构的类型不可互换。
  2. REPL:C# 不具备读取-求值-打印循环 (REPL),无法快速构建解决方案原型。
  3. 必不可少的空格:需要正确使用大括号 {} 来标准块范围。

如果你了解 Python,那么 C# 的学习过程会很顺利。 这些语言具有相似的概念和相似的习语。