反射和new的區(qū)別
什么是反射,什么是new
相信學(xué)過C#基礎(chǔ)和設(shè)計模式的小伙伴都聽說過和使用過“實例化”類 這個我們做項目必不可少的過程 那么小伙伴們必不可少的實例化方法一定用過這兩種 1.使用配置文件+反射的方法
2.直接new的方法
所以我覺得大家可能也會有相同的疑問:這兩個到底有什么區(qū)別呢?接下來小編給大家仔細(xì)的講解一下。
首先說一下我們最先學(xué)到的實例化方法 new():
new對象屬于靜態(tài)編譯 也就是說當(dāng)代碼生成EXE文件的時候會將所有模塊都編譯進(jìn)去,當(dāng)你啟動這個EXE文件的時候,所有模塊就會進(jìn)行一個加載的過程(初始化)這個過程在小程序中不會有什么區(qū)別,但是當(dāng)生成程序是一個比較大的程序的時候,這個加載過程就會比較吃力了,這樣你的程序就會對硬件配置產(chǎn)生額外負(fù)荷,這是我們需要避免的。
還有就是new對象是不能調(diào)用該類里面私有的東西
最重要的是new對象一定要知道類名,當(dāng)你不知道類名的時候就沒辦法進(jìn)行new對象了
舉例:spring框架是事先就寫好的框架,他內(nèi)部的處理并不知道用戶要寫哪些類,應(yīng)為那是以后由用他的人來定的,這時候你還能在spring內(nèi)部去new嗎?所以用戶在用的時候才去配置文件中配置類路徑,這是一個典型反射的例子,在很多面試中就問道了這個問題。(關(guān)于這點是從網(wǎng)上大牛借鑒來的,當(dāng)大家學(xué)習(xí)框架以后就會明白了)
但是如果在已知類名的情況下還是new的效率更高一些
下面是反射方法:
反射屬于動態(tài)編譯,編譯過程中并不會將模塊編譯進(jìn)去,這樣初始化的時候就會減少負(fù)荷,只有在運行過程中,需要哪些模塊的時候才進(jìn)行調(diào)用
例如你做了一個網(wǎng)頁:里邊有聽歌,看圖片,閱讀等功能,動態(tài)編譯是說,當(dāng)你打開網(wǎng)頁的時候,并不會將三個功能全部進(jìn)行加載,只會在你點擊其中一項的時候才會加載選中的模塊供用戶使用
動態(tài)編譯相比較靜態(tài)編譯具有速度快,節(jié)省系統(tǒng)資源,利于擴(kuò)展的優(yōu)點
舉例說明
如果用出去旅行來舉例的話,new相當(dāng)于買了一個自行車 走到哪帶到哪 而反射相當(dāng)于在哪里需要車子,就在哪租一個,不需要一直帶在身上
這個比較夸張的比喻希望能夠幫到大家理解new 和 反射
如果你對反射知識感興趣可以點擊: