静态方法和实例方法(mark)
借花獻(xiàn)佛
[轉(zhuǎn)自?ivony's?blog]
關(guān)于靜態(tài)方法和實(shí)例方法的一些誤區(qū)。?
一、????靜態(tài)方法常駐內(nèi)存,實(shí)例方法不是,所以靜態(tài)方法效率高但占內(nèi)存。
?
????事實(shí)上,方法都是一樣的,在加載時機(jī)和占用內(nèi)存上,靜態(tài)方法和實(shí)例方法是一樣的,在類型第一次被使用時加載。調(diào)用的速度基本上沒有差別。
?
?
二、????靜態(tài)方法在堆上分配內(nèi)存,實(shí)例方法在堆棧上。
?
????事實(shí)上所有的方法都不可能在堆或者堆棧上分配內(nèi)存,方法作為代碼是被加載到特殊的代碼內(nèi)存區(qū)域,這個內(nèi)存區(qū)域是不可寫的。
?
?
三、????實(shí)例方法需要先創(chuàng)建實(shí)例才可以調(diào)用,比較麻煩,靜態(tài)方法不用,比較簡單。
????事實(shí)上如果一個方法與他所在類型的實(shí)例無關(guān),那么它就應(yīng)該是靜態(tài)的,決不會有人把它寫成實(shí)例方法。所以所有的實(shí)例方法都與實(shí)例有關(guān),既然與實(shí)例有關(guān),那么創(chuàng)建實(shí)例就是必然的步驟,沒有麻煩簡單一說。實(shí)際上上你可以把所有的實(shí)例方法都寫成靜態(tài)的,將實(shí)例作為參數(shù)傳入即可。
????有些方法看似與所在的實(shí)例無關(guān),如IComparer.Compare方法,但實(shí)際上每一個實(shí)現(xiàn)這個接口的類都只會負(fù)責(zé)自己類型實(shí)例的比較,這是C#1.x規(guī)范中沒有泛型所帶來的歷史遺留問題。
????大部分靜態(tài)方法是與類的實(shí)例有關(guān)的,如各種Parse方法,他做成靜態(tài)的原因是他沒有實(shí)例作為參數(shù)。其他的大多是出于語義或者其他目的的考慮。
轉(zhuǎn)載于:https://www.cnblogs.com/notisnot/p/6994234.html
總結(jié)
以上是生活随笔為你收集整理的静态方法和实例方法(mark)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于ZipOupputStream添加压
- 下一篇: C Builder中如何利用消息