C#的類中可以包含兩種方法:C#靜态方法與非靜态方法。那麼他們的定義有什麼不同呢?他們在使用上會有什麼不同呢?讓我們來看看最直覺的差别:使用了static 修飾符的方法為靜态方法,反之則是非靜态方法。
比較一、C#靜态成員:
靜态成員屬于類所有,非靜态成員屬于類的執行個體所有。
每建立一個類的執行個體,都會在記憶體中為非靜态成員新配置設定一塊存儲;靜态成員屬于類所有,為各個類的執行個體所公用,無論類建立了多少執行個體,類的靜态成員在記憶體中隻占同一塊區域。
比較二、C#靜态方法
C#靜态方法屬于類所有,類執行個體化前即可使用。
非靜态方法可以通路類中的任何成員,靜态方法隻能通路類中的靜态成員。因為靜态方法在類執行個體化前就可以使用,而類中的非靜态變量必須在執行個體化之後才能配置設定記憶體,這樣,C#靜态方法調用時無法判斷非靜态變量使用的記憶體位址。是以無法使用。而靜态變量的位址對類來說是固定的,故可以使用。
比較三、C#靜态方法是一種特殊的成員方法
它不屬于類的某一個具體的執行個體,而是屬于類本身。是以對靜态方法不需要首先建立一個類的執行個體,而是采用類名.靜态方法的格式 。
static内部隻能出現static變量和其他static方法!而且static方法中還不能使用this....等關鍵字..因為它是屬于整個類!
靜态方法效率上要比執行個體化高,靜态方法的缺點是不自動進行銷毀,而執行個體化的則可以做銷毀。
靜态方法和靜态變量建立後始終使用同一塊記憶體,而使用執行個體的方式會建立多個記憶體。
比較四、C#靜态方法中擷取類的名稱
靜态方法中用:
string className = System.Reflection.MethodBase. GetCurrentMethod().ReflectedType.FullName;
非靜态方法中還可以用:
string className = this.GetType().FullName;
使用靜态得準則就是:1.保證不會産生并發。2. 在友善快捷和開發難度上做一個衡量
轉載于:https://www.cnblogs.com/zhxhdean/archive/2011/04/21/2023250.html