C#、TypeScript 和 JavaScript 都是 C 系列语言的成员。 语言之间的相似性可帮助你在 C# 中快速提高工作效率。
-
类似的语法:JavaScript、TypeScript 和 C# 采用 C 系列语言。 这种相似性意味着你已经可以阅读并理解 C#。 存在一些差异,但大多数语法与 JavaScript 和 C 相同。大括号和分号很熟悉。
if
、else
、switch
等控制语句相同。 循环语句for
、while
和do
...while
相同。 C# 和 TypeScript 中的关键字class
interface
相同。 TypeScript 和 C# 中的访问修饰符,从public
到private
,是相同的。 -
令牌
=>
:所有语言都支持轻型函数定义。 在 C# 中,它们称为 Lambda 表达式,在 JavaScript 中,它们通常称为 箭头函数。 - 函数层次结构:这三种语言都支持 本地函数,这些函数是其他函数中定义的函数。
-
Async/Await:所有三种语言共享相同的用于异步编程的
async
和await
关键字。 - 垃圾回收:这三种语言都依赖于垃圾回收器进行自动内存管理。
-
事件模型:C# 的
event
语法类似于文档对象模型 (DOM) 事件的 JavaScript 模型。 - 包管理器: NuGet 是 C# 和 .NET 最常见的包管理器,类似于 JavaScript 应用程序的 npm。 C# 库是通过 程序集交付的。
学习 C# 时,你将了解不属于 JavaScript 的概念。 如果使用 TypeScript,其中一些概念可能很熟悉:
-
C# 类型系统:C# 是强类型语言。 每个变量都有一个类型,并且该类型无法更改。 您定义
class
或struct
类型。 可以定义interface
定义来定义其他类型实现的行为。 TypeScript 包括其中许多概念,但由于 TypeScript 是基于 JavaScript 构建的,因此类型系统并不那么严格。 -
模式匹配:模式匹配可以根据复杂数据结构的形状提供简洁的条件语句和表达式。
表达式
is
检查变量是否符合某种模式。 基于模式的switch
表达式提供了丰富的语法来检查变量并根据其特征做出决策。 - 字符串插值和原始字符串字面量:字符串插值使你能够在字符串中插入已评估的表达式,而不是使用位置标识符。 原始字符串字面量可用于最小化文本中的转义序列。
-
可以为 null 的类型和不可为 null 的类型:C# 通过向类型附加 后缀来支持可以为 null 的值类型和
?
。 对于可以为 null 的类型,如果在取消引用表达式之前不检查是否有null
,编译器会发出警告。 对于不可为 null 的类型,如果向该变量分配null
值,编译器会发出警告。 这些功能可以最大程度地避免应用程序引发 System.NullReferenceException。 在 TypeScript 使用?
表示可选属性时,其语法可能会让人感到熟悉。 - LINQ:语言集成查询 (LINQ) 提供了一种通用语法来查询和转换数据,无论其存储方式如何。
当你了解更多时,其他差异会变得明显,但其中许多差异的范围较小。
JavaScript 和 TypeScript 中的一些熟悉的功能和习惯在 C# 中不可用:
-
动态类型:C# 使用静态键入。 变量声明包括该类型,并且该类型无法更改。 C# 中有一种
dynamic
提供运行时绑定的类型。 -
原型继承:C# 继承是类型声明的一部分。 C#
class
声明声明任何基类。 在 JavaScript 中,可以设置属性__proto__
以在任何实例上设置基类型。 - 解释语言:必须先编译 C# 代码,然后才能运行它。 JavaScript 代码可以直接在浏览器中运行。
此外,C# 中没有更多 TypeScript 功能:
- 联合类型:C# 不支持联合类型。 但是,设计建议正在进行中。
-
修饰器:C# 没有修饰器。 一些常见的修饰器,例如
@sealed
,是在 C# 中被保留的关键字。 其他常见装饰器可能具有相应的 属性。 对于其他修饰器,你可以创建自己的属性。 - 更宽容的语法:C# 编译器比 JavaScript 要求更严格地分析代码。
如果要生成 Web 应用程序,应考虑使用 Blazor 生成应用程序。 Blazor 是为 .NET 和 C# 构建的全堆栈 Web 框架。 Blazor 组件可以作为 .NET 程序集或在使用 WebAssembly 的客户端上运行。 Blazor 支持与喜欢的 JavaScript 或 TypeScript 库进行互作。