淺析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)方法只能訪問靜態(tài)成員和方法,非靜態(tài)方法都可以訪問;
3.靜態(tài)方法不能標(biāo)記為override,導(dǎo)致派生類不能重寫,但是可以訪問;
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)問題;
當(dāng)然并發(fā)不安全跟方法本身沒關(guān)系,跟共享的那個(gè)資源有關(guān)系比如某個(gè)變量,每個(gè)線程都對(duì)其進(jìn)行操作,都能改變其值,多線程(并發(fā)其實(shí)就是多線程),操作它,其值混亂,就有問題了
為什么要用非靜態(tài)方法

這是本人寫的一個(gè)方法,當(dāng)初直接寫成static方法,沒有別人的原因,是因?yàn)椴幌雽?shí)例化可以少些一行代碼,并沒有想過靜態(tài)和非靜態(tài)的區(qū)別= =!~~;當(dāng)然寫成非static的方法也是可以的;
原因
1.因?yàn)榉椒ㄐ枰貜?fù)的調(diào)用,每次都去new一次會(huì)造成內(nè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#和vb.net實(shí)現(xiàn)PDF 添加可視化和不可見數(shù)字簽名
本文通過C#程序代碼展示如何給PDF文檔添加可視化數(shù)字簽名和不可見數(shù)字簽名。文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
c#?理解csredis庫(kù)實(shí)現(xiàn)分布式鎖的詳細(xì)流程
這篇文章主要介紹了c#?理解csredis實(shí)現(xiàn)分布式鎖,該庫(kù)本身已經(jīng)足夠完善,這里我畫蛇添足一下,為了方便自己的使用,本文通過實(shí)例代碼給大家詳細(xì)介紹,需要的朋友可以參考下2022-02-02
C#實(shí)現(xiàn)熱更新服務(wù)器程序的具體過程
什么是熱更新?就是不停機(jī)更新,實(shí)時(shí)更新,這篇文章主要給大家介紹了關(guān)于C#實(shí)現(xiàn)熱更新服務(wù)器程序的具體過程,通過熱更新改善用戶體驗(yàn)(節(jié)省流量、時(shí)間、操作程度),需要的朋友可以參考下2021-07-07
C#+MO實(shí)現(xiàn)一個(gè)道路編輯軟件(剛開始)
C#+MO實(shí)現(xiàn)一個(gè)道路編輯軟件(剛開始)...2007-04-04
C#實(shí)現(xiàn)去除Strings中空格的方法
這篇文章主要介紹了C#實(shí)現(xiàn)去除Strings中空格的方法,較為詳細(xì)的介紹了C#實(shí)現(xiàn)去除字符串首尾及中間空格的方法,是非常實(shí)用的技巧,需要的朋友可以參考下2014-10-10

