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