语言功能和库类型之间的关系

C# 语言定义要求标准库在这些类型上具有某些类型和某些可访问成员。 编译器生成代码,这些必需的类型和成员用于许多不同的语言功能。 因此,C# 版本仅支持相应的 .NET 版本和更新版本。 这可确保正确的运行时行为以及所有必需类型和成员的可用性。

这种对标准库功能的依赖自第一个版本以来一直是 C# 语言的一部分。 在该版本中,示例包括:

  • Exception - 用于所有编译器生成的异常。
  • String - string 的同义词。
  • Int32 - int 的同义词。

第一个版本很简单:编译器和标准库一起发布,每个版本只有一个版本。

后续版本的 C# 偶尔会向依赖项添加新类型或成员。 示例包括: INotifyCompletionCallerFilePathAttributeCallerMemberNameAttribute。 C# 7.0 添加了一个依赖项 ValueTuple 来实现 元组 语言功能。 C# 8 对于System.Index需要 System.Range 以及其他功能。 每个新版本可能会添加其他要求。

语言设计团队致力于最大限度减少合规标准库中所需类型和成员的范围。 这一目标与一种简洁的设计相平衡,其中新库功能被无缝地整合进语言中。 将来的 C# 版本中将有新功能,这些新功能需要标准库中的新类型和成员。 C# 编译器工具现在与受支持平台上 .NET 库的发布周期分离。