首頁  >  文章  >  後端開發  >  C#中關於靜態與非靜態方法的差異介紹

C#中關於靜態與非靜態方法的差異介紹

黄舟
黄舟原創
2017-09-06 13:49:231401瀏覽

靜態方法與非靜態方法的區別:

  1.靜態方法不需要類別實例化就可以調用,反之非靜態方法需要實例化後才能調用;

  2.靜態方法只能存取靜態成員和方法,非靜態方法都可以存取;

  3.靜態方法不能標記為override,導致派生類別不能重寫,但是可以存取;

  4 .靜態成員是在第一次使用時進行初始化。非靜態的成員是在創建物件的時候,從記憶體分配上來說靜態是連續的,非靜態在記憶體的儲存上是離散的,因此靜態方法和非靜態方法,在呼叫速度上,靜態方法速度一定會快點,因為非靜態方法需要實例化,分配內存,但靜態方法不用,但是這種速度上差異可以忽略不計

何時用靜態方法,何時用實例方法:

  1.一個方法和他所在類別的實例物件無關,不依賴new出來的實例,那麼它就應該是靜態的

  2.不需要物件導向的理念的時候用靜態;例如動物-> RUN ,因為你可能會擴展出貓run、狗run,這時候就需要用非靜態的方法

 

關於線程安全:

  靜態方法只有一個實例,當有靜態變數的時候,對於高並發的時候,並發的所有執行都走那個方法,靜態變數的值就會改變,導致出現問題;

#  當然並發不安全跟方法本身沒關係,跟共享的那個資源有關係比如某個變量,每個線程都對其進行操作,都能改變其值,多線程(並發其實就是多線程),操作它,其值混亂,就有問題了

為什麼要用非靜態方法

#  這是本人寫的一個方法,當初直接寫成static方法,沒有別人的原因,是因為不想實例化可以少些一行程式碼,並沒有想過靜態和非靜態的差異= =! ~~;當然寫成非static的方法也是可以的;

  原因

  1.因為方法需要重複的調用,每次都去new一次會造成內存的開銷,使用靜態的方法就會一直在記憶體中,不需要重新new一塊空間初始化資料;

  2.不需要去做OO;

  3.方法不依賴new出來的內容;

  比較經典的static方法,DBHelp裡面基本上都是static方法

以上是C#中關於靜態與非靜態方法的差異介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn