靜態(tài)方法和實(shí)例方法-創(chuàng)新互聯(lián)

C#中的方法有兩種:實(shí)例方法,靜態(tài)方法。方法一般都是指針引用。使用了static修飾符的方法為靜態(tài)方法,反之則是實(shí)例方法。靜態(tài)方法是全局的,實(shí)例方法是局部的。二者的內(nèi)存分配機(jī)制不同,靜態(tài)方法是在程序啟動(dòng)時(shí)加載為程序集分配內(nèi)存時(shí)就以經(jīng)分配內(nèi)存,而實(shí)例方法是在程序運(yùn)行的時(shí)候加載到內(nèi)存,靜態(tài)方法和靜態(tài)變量的聲明周期和程序集是一樣的

你所需要的網(wǎng)站建設(shè)服務(wù),我們均能行業(yè)靠前的水平為你提供.標(biāo)準(zhǔn)是產(chǎn)品質(zhì)量的保證,主要從事成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、企業(yè)網(wǎng)站建設(shè)、手機(jī)網(wǎng)站開發(fā)、網(wǎng)頁設(shè)計(jì)、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)頁制作、做網(wǎng)站、建網(wǎng)站。創(chuàng)新互聯(lián)建站擁有實(shí)力堅(jiān)強(qiáng)的技術(shù)研發(fā)團(tuán)隊(duì)及素養(yǎng)的視覺設(shè)計(jì)專才。

靜態(tài)方法效率上要比實(shí)例化高,靜態(tài)方法的缺點(diǎn)是不自動(dòng)進(jìn)行銷毀,而實(shí)例化的則可以做銷毀。靜態(tài)方法和靜態(tài)變量創(chuàng)建后始終使用同一塊內(nèi)存,而使用實(shí)例的方式會(huì)創(chuàng)建多個(gè)內(nèi)存。

靜態(tài)方法是一種特殊的成員方法,它不屬于類的某一個(gè)具體的實(shí)例,而是屬于類本身,所以在外部調(diào)用靜態(tài)方法時(shí),可以使用"類名.方法名"的方式,也可以使用"對象名.方法名"的方式。而實(shí)例方法只有后面這種方式。也就是說,調(diào)用靜態(tài)方法可以無需創(chuàng)建對象。

靜態(tài)方法只能訪問靜態(tài)成員,實(shí)例方法可以訪問靜態(tài)和實(shí)例成員。之所以不允許靜態(tài)方法訪問實(shí)例成員變量,是因?yàn)閟tatic方法是類中的一個(gè)成員方法是屬于整個(gè)類,實(shí)例成員變量是屬于某個(gè)對象的,而靜態(tài)方法在執(zhí)行時(shí),并不一定存在對象。同樣,因?yàn)閷?shí)例方法可以訪問實(shí)例成員變量,如果允許靜態(tài)方法調(diào)用實(shí)例方法,將間接地允許它使用實(shí)例成員變量,所以它也不能調(diào)用實(shí)例方法。static內(nèi)部只能出現(xiàn)static變量和其他static方法,而且static方法中不能使用this關(guān)鍵字,因?yàn)樗菍儆谡麄€(gè)類的。main()方法是一個(gè)典型的靜態(tài)方法,它同樣遵循一般靜態(tài)方法的規(guī)則,所以它可以由系統(tǒng)在創(chuàng)建對象之前就調(diào)用。

那么在程序中什么地方可以利用靜態(tài)字段和靜態(tài)構(gòu)造方法:通常適用于于一些不會(huì)經(jīng)常變化而又頻繁使用的數(shù)據(jù),比如連接字符串,配置信息等,當(dāng)滿足上面所 說的兩點(diǎn)時(shí),進(jìn)行一次讀取,以后就可以方便的使用了,同時(shí)也節(jié)約了托管資源,因?yàn)閷τ陟o態(tài)成員,一個(gè)靜態(tài)字段只標(biāo)識一個(gè)存儲位置。對一個(gè)類無論創(chuàng)建了多少 個(gè)實(shí)例,它的靜態(tài)字段永遠(yuǎn)都只有一個(gè)副本(副本我理解為只有一塊內(nèi)存靜態(tài)成員存在于內(nèi)存,非靜態(tài)成員需要實(shí)例化才會(huì)分配內(nèi)存)。 公用的處理函數(shù),使用靜態(tài)方法應(yīng)該沒有問題..牽涉到數(shù)據(jù)共享,靜態(tài)變量的函數(shù)要多考慮...靜態(tài)變量要小心使用..靜態(tài)方法 原理就是共享代碼段 共享代碼段不會(huì)產(chǎn)生任何問題 因?yàn)榇a段都是給CPU作為"讀取"用的,除非你進(jìn)行惡意"修改"運(yùn)行時(shí)的代碼段 所以靜態(tài)方法是可以放心使用的靜態(tài)變量 原理就是共享數(shù)據(jù)段 同上 只要沒有進(jìn)行"寫入"操作就不會(huì)產(chǎn)生問題 但是數(shù)據(jù)通常都是用于讀和寫 所以靜態(tài)變量要注意使用

常見的一些誤區(qū)【摘自下面鏈接】

http://idai.blogbus.com/logs/7078424.html

1、大家都以為“ 靜態(tài)方法常駐內(nèi)存,實(shí)例方法不是,所以靜態(tài)方法效率高但占內(nèi)存。”

事實(shí)上,他們都是一樣的,在加載時(shí)機(jī)和占用內(nèi)存上,靜態(tài)方法和實(shí)例方法是一樣的,在類型第一次被使用時(shí)加載。調(diào)用的速度基本上沒有差別。

2、大家都以為“ 靜態(tài)方法在堆上分配內(nèi)存,實(shí)例方法在堆棧上”

事實(shí)上所有的方法都不可能在堆或者堆棧上分配內(nèi)存,方法作為代碼是被加載到特殊的代碼內(nèi)存區(qū)域,這個(gè)內(nèi)存區(qū)域是不可寫的。

方法占不占用更多內(nèi)存,和它是不是static沒什么關(guān)系。

因?yàn)樽侄问怯脕泶鎯γ總€(gè)實(shí)例對象的信息的,所以字段會(huì)占有內(nèi)存,并且因?yàn)槊總€(gè)實(shí)例對象的狀態(tài)都不一致(至少不能認(rèn)為它們是一致的),所以每個(gè)實(shí)例對象的所以字段都會(huì)在內(nèi)存中有一分拷貝,也因?yàn)檫@樣你才能用它們來區(qū)分你現(xiàn)在操作的是哪個(gè)對象。

但方法不一樣,不論有多少個(gè)實(shí)例對象,它的方法的代碼都是一樣的,所以只要有一份代碼就夠了。因此無論是static還是non-static的方法,都只存在一份代碼,也就是只占用一份內(nèi)存空間。

同樣的代碼,為什么運(yùn)行起來表現(xiàn)卻不一樣?這就依賴于方法所用的數(shù)據(jù)了。主要有兩種數(shù)據(jù)來源,一種就是通過方法的參數(shù)傳進(jìn)來,另一種就是使用class的成員變量的值……

3、大家都以為“實(shí)例方法需要先創(chuàng)建實(shí)例才可以調(diào)用,比較麻煩,靜態(tài)方法不用,比較簡單”

事實(shí)上如果一個(gè)方法與他所在類的實(shí)例對象無關(guān),那么它就應(yīng)該是靜態(tài)的,而不應(yīng)該把它寫成實(shí)例方法。所以所有的實(shí)例方法都與實(shí)例有關(guān),既然與實(shí)例有關(guān),那么創(chuàng)建實(shí)例就是必然的步驟,沒有麻煩簡單一說。

當(dāng)然你完全可以把所有的實(shí)例方法都寫成靜態(tài)的,將實(shí)例作為參數(shù)傳入即可,一般情況下可能不會(huì)出什么問題。

從面向?qū)ο蟮慕嵌壬蟻碚f,在抉擇使用實(shí)例化方法或靜態(tài)方法時(shí),應(yīng)該根據(jù)是否該方法和實(shí)例化對象具有邏輯上的相關(guān)性,如果是就應(yīng)該使用實(shí)例化對象  反之使用靜態(tài)方法。這只是從面向?qū)ο蠼嵌壬蟻碚f的。

如果從線程安全、性能、兼容性上來看  也是選用實(shí)例化方法為宜。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

分享文章:靜態(tài)方法和實(shí)例方法-創(chuàng)新互聯(lián)
文章URL:http://www.muchs.cn/article8/ipcip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、自適應(yīng)網(wǎng)站網(wǎng)站導(dǎo)航、做網(wǎng)站、小程序開發(fā)、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)