.NET 反射概述
反射
反射提供了封裝程序集、模塊和類型的對(duì)象(Type 類型)??梢允褂梅瓷鋭?dòng)態(tài)創(chuàng)建類型的實(shí)例,將類型綁定到現(xiàn)有對(duì)象,或從現(xiàn)有對(duì)象獲取類型并調(diào)用其方法或訪問(wèn)其字段和屬性。如果代碼中使用了屬性,可以利用反射對(duì)它們進(jìn)行訪問(wèn)。
獲取變量類型
- int i = 42;
- System.Type type = i.GetType();
加載程序集
- System.Reflection.Assembly o = System.Reflection.Assembly.Load("mscorlib.dll");
適用場(chǎng)景
- 需要訪問(wèn)程序元數(shù)據(jù)的屬性
- 檢查和實(shí)例化程序集中的類型
- 在運(yùn)行時(shí)構(gòu)建新類型,使用 System.Reflection.Emit 中的類
- 執(zhí)行后期綁定,訪問(wèn)在運(yùn)行時(shí)創(chuàng)建的類型的方法
性能影響
反射的性能損失主要來(lái)源于比較類型、遍歷成員、調(diào)用成員三種情形,其中比較類型耗時(shí)最小,調(diào)用成員耗時(shí)最多,所以盡量減少采用成員動(dòng)態(tài)調(diào)用等反射方式可以提高應(yīng)用程序性能。除此之外,采取后期綁定、避免將反射方法放到循環(huán)內(nèi)產(chǎn)生放大效應(yīng)等辦法均可提升反射性能。