程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 關於c#靜態方法和實例方法的辨析和應用

關於c#靜態方法和實例方法的辨析和應用

編輯:C#入門知識

本文將圍繞c#靜態方法和實例方法討論一下。針對一些觀點,如:"靜態方法是常駐內存", 還有"靜態方法比實例方法先裝載",做一個辨析。同時討論下何時用靜態方法,何時用實例方法。

 

前幾日,在微軟的好友發給我一個鏈接:《靜態方法和實例化方法之間的區別你知道了嘛? 歡迎討論!! - 問題最終 ...》,然後說這裡某些觀點需要澄清一下,希望我寫一篇blog。我當時讀了這篇blog. 文比較短,列舉了靜態方法和實例方法的幾種案例,也沒有論點,然後就請大家討論。後面評論就比blog熱鬧多了。言辭也激烈,後來該blog作者干脆把這篇blog刪了。現在已經看不到這篇blog了。現在我寫這篇blog,一是針對一些觀點做個辨析,二是完成好友的所托。

 

c#靜態方法和實例方法的幾種用法

 

見如下代碼:這三種形式我們應該都用過。

01 public class SomeClass 02 { 03     private string myfield = null; 04     public static instance = new SomeClass(); 05     public instranceMethod() {}; 06     public static staticMethod() {}; 07 } 08    09 public class AnotherClass 10 { 11     public static Main() 12     { 13         //第一種方式, 聲明實例,調用實例方法 14       SomeClass someClass = new SomeClass(); 15          someClass.instanceMethod(); 16    17         //第二種方式,通過一個靜態的實例,去調用實例方法 18       SomeClass.instance.instanceMethod(); 19    20         //第三種方式,直接調用靜態方法 21       SomeClass.staticMethod(); 22     } 23 }

 

這幾種方式在調用時間,還有線程安全,面向對象的編程方面都有差別。後文會談到。

 

"靜態方法是常駐內存"

 

這是那位blog作者在評論中給出的觀點。我覺得"靜態方法是常駐內存"的說法是不對的。要知道一個.net類型的靜態方法是屬於這個.net類型的。而這個.net類型是一個.net 程序集的一部分。這個.net程序集是被一個AppDomain裝入到內存裡面來的。這個AppDomain是可以從內存卸載的。一個有.net CLR的進程裡面可以有多於一個的AppDomain,第一個AppDomain之後的AppDomain都可以動態創建和卸載。這些AppDomain中的.net程序集,既可以有靜態方法,也可以有實例方法。不管是靜態方法還是實例方法,都是隨其程序集所在的AppDomain一起創建和卸載。第一個AppDomain在整個程序運行結束時也會最後被卸載。其中所含的.net程序集自然也卸載。看圖1會更明白點。所以靜態方法不存在常駐內存一說。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved