c# - C# 编译器如何使用泛型?

标签 c# .net generics cil cil-metadata

在 C++ 中,template 声明需要在头文件中(除非您显式声明模板类型),我明白为什么。

我不明白的是,如果 C# 编译器没有要检查的 .cs 文件,它如何处理泛型。我怀疑它会检查 CIL,因为那将是处理器密集型操作。我知道它能够从元数据中提取类型信息,但如果通用函数的代码也被编码,这对可执行文件来说将是一个巨大的膨胀。

那么,编译器又是如何处理泛型的呢?

最佳答案

我猜你问的是 C# 编译器如何使用引用程序集中定义的泛型类型,而不是问 C# 编译器如何编译定义泛型类型的 .cs 文件(因为你说“如果它没有”没有 .cs 文件")。

泛型类型和成员在 IL 中被编码为泛型。封闭的泛型类型和成员由 jit 编译器在运行时构造。因此,对您的问题的简单回答是“C# 编译器通过发出 IL 来处理泛型类型,这会导致 jit 编译器在运行时构造它们。”

关于c# - C# 编译器如何使用泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14343498/

相关文章:

c# - 如何检查泛型类型定义是否继承自另一个泛型类型定义

c# - C#泛型的反约束

c# - 如何在 C# 中生成从库到应用程序的回调(事件)

c# - 点对点去中心化网络——向所有点发送消息

c# - 将 DLL 导入 Unity - 找不到类型或命名空间

c# - 如何在字符串列表中添加额外的字符?

c# -\n 是否等同于 .NET 中的 Environment.NewLine?

c# - 从代码访问 MVVM Light ViewModelLocator

c# - #pragma 警告禁用和恢复

c# - 检查给定对象(引用或值类型)是否等于其默认值