2010-11-21 162 views
6

我在看一些C#教程,指出以下:對象創建

「後發現屬性類,編譯器會檢查屬性是否被允許在一個類然後,它會檢查對於與屬性use中指定的參數相匹配的構造函數,如果它找到一個構造函數,則通過調用具有指定值的構造函數來創建該對象的一個​​實例「

此段的名稱是」編譯過程「它指的是編譯器處理屬性的方式。我爲無知而感到抱歉,但不應該在運行時創建實例嗎?

感謝。

+2

正在搜索該報價正好返回1個結果:此問題。你從哪裏得到它的? – dtb 2010-11-21 16:07:36

+0

聽起來好像這裏的編譯器被用作「編譯器生成的代碼」的同義詞。 – Hogan 2010-11-21 17:38:44

回答

3

屬性爲類定義元數據 - 類的每個實例(即對象)將共享相同的屬性值。該元數據與類型定義一起存儲,該類型定義在編譯時從源文件計算一次。

1

有一個「編譯」過程,生成一箇中介碼,使用.NET框架進行解釋。

這就是爲什麼他們在談論編譯過程。

2

既然有屬性,也affect the compiler,我不會感到驚訝,如果編譯did編譯時實例化它們。所以呢?

+0

我不知道編譯器實例化對象。 – user429400 2010-11-21 16:37:01

+1

聽起來不太可能。我懷疑編譯器實例化屬性(即它調用用戶定義屬性的構造函數)。 – CodesInChaos 2010-11-21 17:20:22

+0

編譯器如何實例化一個對象? – miguel 2010-11-21 17:57:54

0

編譯器僅創建描述屬性構造和對其屬性賦值的元數據。 屬性本身僅在您使用反射列出屬性時才實例化。我認爲每次調用反射都會創建該屬性的新實例。

我認爲有一種方法(與僅反射上下文有關)直接從元檢查屬性,根本沒有實例化它。