簡體   English   中英

c# - 同一程序集中的自引用類或循環引用類如何成功編譯

[英]c# - How do self-referencing classes or circular-referencing classes within same assembly compile successfully

我想知道C#和.Net編譯器如何能夠在同一個程序集中成功編譯自引用類或循環引用類。

請考慮以下代碼存在於同一程序集中。

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

當然,這段代碼編譯成功。
但是怎么樣? 我想知道編譯器是如何在這些情況下第一次解析類的。
例如,當編譯器遇到類Y時,它還不知道類Z. 如何在Y類中解析子屬性z?
請解釋編譯代碼時后台究竟發生了什么。 可能是關於編譯器如何解析類和類型的一些合適的文章

正如提到的這個文章,C#編譯器執行“二過一”,即

  1. 在第一遍中,它計算元數據:“頂級”的東西,如名稱空間,類,結構,枚舉,接口,委托,方法,類型參數,形式參數,構造函數,事件,屬性等。

  2. 第二遍計算IL:進入方法體,構造函數體等的代碼。

C#編譯方法不同於C / C ++,其中類,方法,宏等在頭文件中聲明,這有助於它通過讀取頭文件一次性獲取有關類,方法等的所有信息。 與C#相比,它沒有頭文件,而是使用Two Pass技術來編譯所有代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM