您好,登錄后才能下訂單哦!
C#的修飾符:static
聲明屬于類型本生而不屬于實體對象的成員。
一、非靜態類
1、非靜態類可以包含靜態的方法、字段、屬性或事件。 靜態的類成員屬于類級別的,不屬于類的任何實例,類外不可以通過類的實體對象來調用靜態變量,要用類名來調用,(如現在有一個Student 類,這個類里有一個static string name,當其他類需要調它的時候就要用Student.name);無論對一個類創建多少個實例,它的靜態成員都只有一個副本,類里的所有成員都可以訪問它,可以改變它的值。 靜態方法和屬性不能訪問其包含類型中的非靜態字段和事件,并且不能訪問任何對象的實例變量(除非在方法參數中顯式傳遞)。
靜態字段有兩個常見的用法:一是記錄已實例化對象的個數;二是存儲必須在所有實例之間共享的值。
靜態方法可以被重載但不能被重寫,因為它們屬于類,不屬于類的任何實例。
2、靜態成員在第一次被訪問之前并且在調用靜態構造函數(如有存在)之前進行初始化。 靜態構造函數用于初始化任何 靜態 數據,或用于執行僅需執行一次的特定操作。 在創建第一個實例或引用任何靜態成員之前,將自動調用靜態構造函數。
public class Students
{
//定義靜態變量
public staic int Num;
//靜態構造函數
static Students()
{
Num = 30;
}
}
3、靜態構造函數具有以下特點:
靜態構造函數既沒有訪問修飾符,也沒有參數。用于對靜態字段、只讀字段等的初始化。
在創建第一個實例或引用任何靜態成員之前,將自動調用靜態構造函數來初始化類。類的靜態構造函數在給定應用程序域中至多執行一次。
靜態構造函數是不可繼承的,而且不能被直接調用。
在程序中,用戶無法控制何時執行靜態構造函數。
如果沒有編寫靜態構造函數,而這時類中包含帶有初始值設定的靜態字段,那么編譯器會自動生成默認的靜態構造函數。
4、靜態變量的幾點說明:
(1)靜態方法和靜態數據成員相當于共享變量,只有“一份”,為該類的所有對象所共有,因而在需要共享數據時,定義這種類型時很好的選擇。 一但定義一個類后(不一定要實例化對象)該類的所有靜態成員就載入內存(并不是程序啟動,就裝入內存,沒有定義該類時它不會載入內存) 靜態成員的作用域與它所屬的類的作用域相同。
(2)方法內部的靜態變量,執行完靜態變量值不消失,再次執行此對象的方法時,值仍存在,它不是在棧中分配的,是在靜態區分析的,(共有兩種變量存儲在靜態存儲區:全局變量和static變量)這是與局部變量最大的區別。
(3)由于靜態成員函數存在于類一級,并且不是對象的一部分,因此沒有 this 指針。在靜態方法中引用 this 是錯誤的。
二、靜態類:
聲明為static,它僅包含靜態成員,不能用new靜態類的實例。使用靜態類來包含不與特定對象關聯的方法。
功能:僅包含靜態成員,不能被實例化,是密封的,不能包含實例構造函數,可包含靜態構造函數以分配初始值或設置某個靜態變量。
優點:編譯器能夠執行檢查以確保不致偶然地添加勢力成員。編譯器將保證不會創建此類的實例。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。