淺析C#中靜態(tài)方法和非靜態(tài)方法的區(qū)別
靜態(tài)方法和非靜態(tài)方法的區(qū)別:
1.靜態(tài)方法不需要類實(shí)例化就可以調(diào)用,反之非靜態(tài)方法需要實(shí)例化后才能調(diào)用;
2.靜態(tài)方法只能訪問(wèn)靜態(tài)成員和方法,非靜態(tài)方法都可以訪問(wèn);
3.靜態(tài)方法不能標(biāo)記為override,導(dǎo)致派生類不能重寫,但是可以訪問(wèn);
4.靜態(tài)成員是在第一次使用時(shí)進(jìn)行初始化。非靜態(tài)的成員是在創(chuàng)建對(duì)象的時(shí)候,從內(nèi)存分配上來(lái)說(shuō)靜態(tài)是連續(xù)的,非靜態(tài)在內(nèi)存的存儲(chǔ)上是離散的,因此靜態(tài)方法和非靜態(tài)方法,在調(diào)用速度上,靜態(tài)方法速度一定會(huì)快點(diǎn),因?yàn)榉庆o態(tài)方法需要實(shí)例化,分配內(nèi)存,但靜態(tài)方法不用,但是這種速度上差異可以忽略不計(jì)
何時(shí)用靜態(tài)方法,何時(shí)用實(shí)例方法:
1.一個(gè)方法和他所在類的實(shí)例對(duì)象無(wú)關(guān),不依賴new出來(lái)的實(shí)例,那么它就應(yīng)該是靜態(tài)的
2.不需要面向?qū)ο蟮睦砟畹臅r(shí)候用靜態(tài);比如動(dòng)物-> RUN ,因?yàn)槟憧赡軙?huì)擴(kuò)展出貓 run、狗 run,這時(shí)候就需要用非靜態(tài)的方法
關(guān)于線程安全:
靜態(tài)方法只有一個(gè)實(shí)例,當(dāng)有靜態(tài)變量的時(shí)候,對(duì)于高并發(fā)的時(shí)候,并發(fā)的所有執(zhí)行都走那個(gè)方法,靜態(tài)變量的值就會(huì)發(fā)生改變,導(dǎo)致出現(xiàn)問(wèn)題;
當(dāng)然并發(fā)不安全跟方法本身沒(méi)關(guān)系,跟共享的那個(gè)資源有關(guān)系比如某個(gè)變量,每個(gè)線程都對(duì)其進(jìn)行操作,都能改變其值,多線程(并發(fā)其實(shí)就是多線程),操作它,其值混亂,就有問(wèn)題了
為什么要用非靜態(tài)方法
這是本人寫的一個(gè)方法,當(dāng)初直接寫成static方法,沒(méi)有別人的原因,是因?yàn)椴幌雽?shí)例化可以少些一行代碼,并沒(méi)有想過(guò)靜態(tài)和非靜態(tài)的區(qū)別= =!~~;當(dāng)然寫成非static的方法也是可以的;
原因
1.因?yàn)榉椒ㄐ枰貜?fù)的調(diào)用,每次都去new一次會(huì)造成內(nèi)存的開(kāi)銷,使用靜態(tài)的方法就會(huì)一直在內(nèi)存中,不需要重新new一塊空間初始化數(shù)據(jù);
2.不需要去做OO;
3.方法不依賴new出來(lái)的內(nèi)容;
比較經(jīng)典的static方法,DBHelp里面基本上都是static方法
相關(guān)文章
C#創(chuàng)建WCF服務(wù)控制臺(tái)應(yīng)用程序詳解
這篇文章主要為大家詳細(xì)介紹了C#創(chuàng)建WCF服務(wù)控制臺(tái)應(yīng)用程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07C#中sqlDataRead 的三種方式遍歷讀取各個(gè)字段數(shù)值的方法
這篇文章主要介紹了C#中 sqlDataRead 的三種方式遍歷讀取各個(gè)字段數(shù)值的方法,每種方法給大家介紹的都非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09C#以太網(wǎng)Sockets服務(wù)器設(shè)計(jì)實(shí)現(xiàn)
本文主要介紹了C#以太網(wǎng)Sockets服務(wù)器設(shè)計(jì)實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02C# WinForm實(shí)現(xiàn)自動(dòng)更新程序的方法詳解
這一篇就著重寫一下客戶端的代碼,客戶端主要實(shí)現(xiàn)的有:?jiǎn)?dòng)后檢測(cè)本地的xml文件,然后發(fā)送到服務(wù)器獲取需要更新的文件以及版本列表,感興趣的小伙伴可以了解一下2022-10-10