加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 21:00:21 所属栏目:百科 来源:网络整理
导读:我想知道C#和.Net编译器如何能够在同一个程序集中成功编译自引用类或循环引用类. 请考虑以下代码存在于同一程序集中. class X{ X x; }class Y{ Z z; }class Z{ Y y; } 当然,这段代码编译成功. 但是怎么样?我想知道编译器是如何在这些情况下第一次解析类的.
我想知道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技术来编译所有代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读