C# 中使用反射的優缺點


本文摘至於:http://blog.csdn.net/springfileld/article/details/17720537 

---------------------------------------------------------------正文-----------------------------------------------------------------

反射被廣泛地用於那些需要在運行時檢測或修改程序行為的程序中。這是一個相對高級的特性,只有那些語言基礎非常扎實的開發者才應該使用它。如果能把這句警示時刻放在心里,那么反射機制就會成為一項強大的技術,可以讓應用程序做一些幾乎不可能做到的事情。

  優點:
            反射提高了程序的靈活性和擴展性,降低耦合性,提高自適應能力。它允許程序創建和控制任何類的對象,無需提前硬編碼目標類;

  缺點:
           1、性能問題:使用反射基本上是一種解釋操作,用於字段和方法接入時要遠慢於直接代碼。因此反射機制主要應用在對靈活性和擴展性要求很高的系統框架上,普通程序不建議使用。      
          2、使用反射會模糊程序內內部邏輯:程序員希望在源代碼中看到程序的邏輯,反射等繞過了源代碼的技術,因而會帶來維護問題。反射代碼比相應的直接代碼更復雜。   至於執行效率的話,還可以,因為它是一種強類型語言,執行效率不錯。不過,建議將反射過后,保存進 cache中。

 

盡管反射非常強大,但也不能濫用。如果一個功能可以不用反射完成,那么最好就不用。在我們使用反射技術時,下面幾條內容應該牢記於心:

 

首先是性能:

反射包括了一些動態類型,所以JVM無法對這些代碼進行優化。因此,反射操作的效率要比那些非反射操作低得多。我們應該避免在經常被 執行的代碼或對性能要求很高的程序中使用反射。

 

安全:
使用反射技術要求程序必須在一個沒有安全限制的環境中運行。如果一個程序必須在有安全限制的環境中運行,如Applet,那么這就是個問題了。

 

成員的內部暴露:

由於反射允許代碼執行一些在正常情況下不被允許的操作(比如訪問私有的屬性和方法),所以使用反射可能會導致意料之外的副作用--代碼有功能上的錯誤,降低可移植性。反射代碼破壞了抽象性,因此當平台發生改變的時候,代碼的行為就有可能也隨着變化


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM