1. 程式人生 > >反射 元數據

反射 元數據

通過 復雜 ise 編譯 沒有 media 屬性表 單表 intel

C#裏的智能感知分成兩種,對於當前工程內容的智能提示,這個和C++一樣,是通過代碼分析出來的,比較復雜。因為這個時候程序還沒有編譯,沒有assembly可以獲得。
對於引用dll裏內容的智能提示,是通過反射實現的,相對簡單一點,C++因為沒有反射是做不到的。

metadata(元數據):是一系列的特殊數據表,描述了模塊中定義的內容,有部分還用來指出托管模塊引用的內容。元數據描述表包括定義表,引用表,清單表。

定義表又包括:模塊表,類型表,方法表,屬性表,字段表,參數表,事件表。

引用表包括:Assembly程序集引用表,模塊引用表,類型引用表,成員引用表。

清單表:引用的外部模塊描述信息,資源模塊。

元數據的用途:

1. 在編譯時,元數據消除了對頭和庫文件的需求,因為與引用的類型/成員相關的所有信息都包括在用IL(Intermediate language “中間語言”)來實現類型/成員的文件中。編譯器可以直接從托管模塊讀取元數據。

2. 微軟VS 使用元數據來幫助我們寫代碼。它的“智能感知(IntelliSense)”特性能解釋元數據,指出一個類型提供了什麽方法,屬性,事件和字段。如果是一個方法,還能指出方法需要什麽參數。

3. CLR的代碼驗證過程使用元數據來確保代碼只執行“安全”的操作

4. 元數據允許將一個對象的字段序列化到一個內存塊中,將其發送給另外一臺機器,然後反序列化,在遠程機器上重建對象狀態。

5. 元數據允許垃圾收集器跟蹤對象的生存期。垃圾收集器能判斷任何對象的類型,病根據元數據知道那個對象中的哪些字段引用了其他對象。

反射 元數據