C#中關于靜態與非靜態方法有什么區別?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
1.靜態方法不需要類實例化就可以調用,反之非靜態方法需要實例化后才能調用;
2.靜態方法只能訪問靜態成員和方法,非靜態方法都可以訪問;
3.靜態方法不能標記為override,導致派生類不能重寫,但是可以訪問;
4.靜態成員是在第一次使用時進行初始化。非靜態的成員是在創建對象的時候,從內存分配上來說靜態是連續的,非靜態在內存的存儲上是離散的,因此靜態方法和非靜態方法,在調用速度上,靜態方法速度一定會快點,因為非靜態方法需要實例化,分配內存,但靜態方法不用,但是這種速度上差異可以忽略不計
何時用靜態方法,何時用實例方法:1.一個方法和他所在類的實例對象無關,不依賴new出來的實例,那么它就應該是靜態的
2.不需要面向對象的理念的時候用靜態;比如動物-> RUN ,因為你可能會擴展出貓 run、狗 run,這時候就需要用非靜態的方法
關于線程安全:靜態方法只有一個實例,當有靜態變量的時候,對于高并發的時候,并發的所有執行都走那個方法,靜態變量的值就會發生改變,導致出現問題;
當然并發不安全跟方法本身沒關系,跟共享的那個資源有關系比如某個變量,每個線程都對其進行操作,都能改變其值,多線程(并發其實就是多線程),操作它,其值混亂,就有問題了
為什么要用非靜態方法這是本人寫的一個方法,當初直接寫成static方法,沒有別人的原因,是因為不想實例化可以少些一行代碼,并沒有想過靜態和非靜態的區別= =!~~;當然寫成非static的方法也是可以的;
原因
1.因為方法需要重復的調用,每次都去new一次會造成內存的開銷,使用靜態的方法就會一直在內存中,不需要重新new一塊空間初始化數據;
2.不需要去做OO;
3.方法不依賴new出來的內容;
比較經典的static方法,DBHelp里面基本上都是static方法
看完上述內容,你們掌握C#中關于靜態與非靜態方法有什么區別的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注創新互聯行業資訊頻道,感謝各位的閱讀!
分享名稱:C#中關于靜態與非靜態方法有什么區別-創新互聯
網頁網址:http://vcdvsql.cn/article0/pjioo.html
成都網站建設公司_創新互聯,為您提供標簽優化、品牌網站設計、移動網站建設、定制網站、品牌網站建設、網站設計公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯