c# – 同一程序集中的自引用类或循环引用类如何成功编译

c# – 同一程序集中的自引用类或循环引用类如何成功编译,第1张

概述我想知道C#和.Net编译器如何能够在同一个程序集中成功编译自引用类或循环引用类. 请考虑以下代码存在于同一程序集中. class X{ X x; }class Y{ Z z; }class Z{ Y y; } 当然,这段代码编译成功. 但是怎么样?我想知道编译器是如何在这些情况下第一次解析类的. 例如,当编译器遇到类Y时,它还不知道类Z.如何在Y类中解析子属性z? 请解释编译代码时后台究竟发 我想知道C#和.Net编译器如何能够在同一个程序集中成功编译自引用类或循环引用类.

请考虑以下代码存在于同一程序集中.

class X{ X x; }class Y{ Z z; }class Z{ Y y; }

当然,这段代码编译成功.
但是怎么样?我想知道编译器是如何在这些情况下第一次解析类的.
例如,当编译器遇到类Y时,它还不知道类Z.如何在Y类中解析子属性z?
请解释编译代码时后台究竟发生了什么.
可能是关于编译器如何解析类和类型的一些合适的文章

解决方法 正如 this文章中提到的,C#编译器执行“Two Pass”即

>在第一遍中,它计算元数据:“顶级”内容,如命名空间,类,结构,枚举,接口,委托,方法,类型参数,形式参数,构造函数,事件,属性等.
>第二遍计算IL:方法体,构造函数体中的代码,等等.

C#编译方法不同于C/C++,其中类,宏等在头文件中声明,这有助于它通过读取头文件一次性获取有关类,方法等的所有信息.与C#相比,它没有头文件,而是使用Two Pass技术来编译所有代码.

总结

以上是内存溢出为你收集整理的c# – 同一程序集中的自引用类或循环引用类如何成功编译全部内容,希望文章能够帮你解决c# – 同一程序集中的自引用类或循环引用类如何成功编译所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1226940.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存