我想知道 C# 和 .Net 编译器如何能够在同一程序集中成功编译自引用类或循环引用类。
考虑以下代码存在于同一个程序集中。
class X{ X x; }
class Y{ Z z; }
class Z{ Y y; }
当然,这段代码编译成功了。
但是如何?我想知道编译器是如何首次在这些情况下解析类的。
例如,当编译器遇到类 Y 时,它还不知道类 Z。它是如何解析 Class Y 中的子属性 z 的?
请解释编译代码时后台究竟发生了什么。
可能有一些关于编译器如何解析类和类型的合适文章
最佳答案
如 this 中所述文章中,C# 编译器执行“两次通过”,即
在第一遍中,它计算元数据:“顶级”内容,如命名空间、类、结构、枚举、接口(interface)、委托(delegate)、方法、类型参数、形式参数、构造函数、事件、属性等.
第二遍计算 IL:进入方法体、构造函数体等的代码。
C#的编译方式不同于C/C++,类、方法、宏等都是在头文件中声明的,这有助于它通过读取头文件一次性获得类、方法等所有信息。与 C# 相比,它没有头文件,而是使用 Two Pass 技术编译所有代码。
关于c# - 如何在同一程序集中成功编译自引用类或循环引用类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37803841/