程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> 靜態類和非靜態類以及靜態方法和非靜態方法的區別

靜態類和非靜態類以及靜態方法和非靜態方法的區別

編輯:C#基礎知識

1、靜態類中不能包括非靜態成員,比如非靜態方法、構造函數;非靜態類中可以包括靜態成員。如果不按照這種規則靜態類編譯器會檢查報錯。

簡而言之就是:靜態類中所有的成員必須是靜態成員,但是靜態成員不一定是在靜態類中 。

2、靜態類無法實例化,其成員可以直接使用;非靜態類中的靜態成員不需要實例化,可以直接使用,非靜態類中的非靜態成員必須實例化。

簡而言之就是:不管在哪靜態成員都不需要實例化其所在類,而非靜態成員必須實例化其所在類。

3、靜態成員之所以執行速度快,是因為其在編譯的時候編譯器放在了靜態區(保存自動全局變量和 static 變量)靜態區的內容在總個程序的生命周期內都存在,而普通類的中的非靜態成員需要實例化,值類型在棧中分配空間,引用類型在棧中存引用地址,堆中存實例對象,從而獲取方法,所以速度慢。

靜態成員變量在程序啟動的時候,就全部裝入內存的靜態區中,而不管這些方法、屬性以後有沒有用到
。即使是沒有人再訪問程序,這部分內存仍然不會釋放。

4、靜態成員等同於全局變量,整個系統中存在統一塊區域(靜態區)中,是共享的,比如static into num=0;編譯的時候num就已經是0了,A線程改了其值為1,B線程獲取的時候num就是1了。

5、靜態方法和屬性不能訪問其包含類型中的非靜態字段和事件。

6、靜態方法只能被重載,而不能被重寫,因為靜態方法不屬於類的實例成員。

7、C# 不支持靜態局部變量(在方法內部定義靜態變量)。

8、靜態類是密封類(sealed),無法被繼承。其密封是有自我保護的作用,並且符合編程三大思想之封裝思想,string也是密封類

9、靜態類只能繼承object類,不能繼承其它類。

10、繼承(多態)與靜態本身就是相反的,靜態類的本質:abstract+sealed。

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