C#中關於靜態與非靜態方法的區別介紹

來源:互聯網
上載者:User

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

  1.靜態方法不需要類執行個體化就可以調用,反之非靜態方法需要執行個體化後才能調用;

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

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

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

何時用靜態方法,何時用執行個體方法:

  1.一個方法和他所在類的執行個體對象無關,不依賴new出來的執行個體,那麼它就應該是靜態

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

關於安全執行緒:

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

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

為什麼要用非靜態方法

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

  原因

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

  2.不需要去做OO;

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

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.