JavaScript 和 TypeScript 开发者学习 C# 的路线图

C#、TypeScript 和 JavaScript 都属于 C 系列语言。 这些语言之间的相似之处可在你使用 C# 时帮助你快速提高工作效率。

  1. 类似的语法:JavaScript、TypeScript 和 C# 均属于 C 系列语言。 这种相似性意味着你已经可以阅读并理解 C#。 虽然存在一些差异,但大部分语法与 JavaScript 和 C 相同。大括号和分号的用法类似。 ifelseswitch 等控制语句相同。 循环语句 forwhiledo...while 相同。 C# 和 TypeScript 中 classinterface 的关键字相同。 TypeScript 和 C# 中的访问修饰符(包括 publicprivate)相同。
  2. => 标记:所有语言都支持轻型函数定义。 在 C# 中,它们被称为 lambda 表达式,在 JavaScript 中,它们通常被称为箭头函数
  3. 函数层次结构:这三种语言都支持局部函数,这些函数是其他函数中定义的函数。
  4. Async / Await:这三种语言使用相同的关键字(asyncawait)来进行异步编程。
  5. 垃圾回收:这三种语言都依赖垃圾回收器进行自动内存管理。
  6. 事件模型:C# 的 event 语法类似于 JavaScript 的文档对象模型 (DOM) 事件模型。
  7. 包管理器NuGet 是 C# 和 .NET 最常见的包管理器,类似于 JavaScript 应用程序的 npm。 系统会以程序集形式提供 C# 库。

继续学习 C# 时,你将了解不属于 JavaScript 的概念。 如果你使用 TypeScript,你可能会熟悉其中一些概念:

  1. C# 类型系统:C# 是一种强类型语言。 每个变量都有一个类型,并且该类型无法更改。 定义 classstruct 类型。 可以定义 interface 定义来定义其他类型实现的行为。 TypeScript 包括其中许多概念,但由于 TypeScript 是基于 JavaScript 构建而成,因此类型系统并不那么严格。
  2. 模式匹配:模式匹配可以根据复杂数据结构的形状提供简洁的条件语句和表达式。 is 表达式检查变量“是否”为某种模式。 基于模式的 switch 表达式提供了丰富的语法来检查变量并根据其特征做出决策。
  3. 字符串插值原始字符串字面量:字符串插值使你能够在字符串中插入已评估的表达式,而不是使用位置标识符。 原始字符串字面量可用于最小化文本中的转义序列。
  4. 可以为 null 的类型和不可为 null 的类型:C# 通过向类型附加 ? 后缀来支持可以为 null 的值类型和可以为 null 的引用类型。 对于可以为 null 的类型,如果在取消引用表达式之前不检查是否有 null,编译器会发出警告。 对于不可为 null 的类型,如果向该变量分配 null 值,编译器会发出警告。 这些功能可以最大程度地避免应用程序引发 System.NullReferenceException。 语法与在 TypeScript 中对可选属性使用 ? 类似。
  5. LINQ:语言集成查询 (LINQ) 提供了一种通用语法来查询和转换数据,无论其存储方式如何。

随着了解的加深,其他差异就会变得明显,但其中许多差异的范围较小。

JavaScript 和 TypeScript 中的一些熟悉的功能和习惯用法不适用于 C#:

  1. 动态类型:C# 使用静态类型。 变量声明包括该类型,并且该类型无法更改。 C# 中有一种提供运行时绑定的 dynamic 类型。
  2. 原型继承:C# 继承是类型声明的一部分。 C# 中的 class 声明用于表示任意基类。 在 JavaScript 中,可以设置 __proto__ 属性以在任意实例上设置基类型。
  3. 解释语言:必须先编译 C# 代码,然后才能运行。 JavaScript 代码可以直接在浏览器中运行。

此外,还有一些 TypeScript 功能在 C# 中不可用:

  1. 联合类型:C# 不支持联合类型。 不过,设计方案正在进行中。
  2. 修饰器:C# 没有修饰器。 一些常见的修饰器(如 @sealed)是 C# 中的保留关键字。 其他常见修饰器可能具有相应的属性。 对于其他修饰器,你可以创建自己的属性。
  3. 更宽容的语法:C# 编译器对代码的解析比 JavaScript 要求的更严格。

如果要生成 Web 应用程序,应考虑使用 Blazor 来构建应用程序。 Blazor 是为 .NET 和 C# 构建的全堆栈 Web 框架。 Blazor 组件可以作为 .NET 程序集或在使用 WebAssembly 的客户端上运行。 Blazor 支持与你偏好的 JavaScript 或 TypeScript 库的互操作。