微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我想知道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技术来编译所有代码.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐