C#中靜態(tài)的深入理解
一、靜態(tài)成員
1、通過static關(guān)鍵字修飾,是屬于類,實(shí)例成員屬于對象,在這個(gè)類第一次加載的時(shí)候,這個(gè)類下面的所有靜態(tài)成員會被加載。
2、靜態(tài)成員只被創(chuàng)建一次,所以靜態(tài)成員只有一份,實(shí)例成員有多少個(gè)對象,就有多少份。
3、類加載的時(shí)候,所有的靜態(tài)成員就會被創(chuàng)建在“靜態(tài)存儲區(qū)”里面,一旦創(chuàng)建直到程序退出,才會被回收。
注:Person p;//這樣實(shí)際上就已經(jīng)被加載了。
4、變量需要被共享的時(shí)候,方法需要被反復(fù)調(diào)用的時(shí)候,就可以把這些成員定義為靜態(tài)成員。
5、在靜態(tài)方法中,不能直接調(diào)用實(shí)例成員,因?yàn)殪o態(tài)方法被調(diào)用的時(shí)候,對象還有可能不存在。
6、this/base 關(guān)鍵字在靜態(tài)方法中不能使用,因?yàn)橛锌赡軐ο筮€不存在。
7、可以創(chuàng)建這個(gè)類的對象,制定對象的成員在靜態(tài)方法中操作。
8、在實(shí)例方法中,可以調(diào)用靜態(tài)成員,因?yàn)檫@個(gè)時(shí)候靜態(tài)成員肯定存在。
二、靜態(tài)成員和實(shí)例成員的區(qū)別
1、生命周期不一樣。
2、在內(nèi)存中存儲的位置不一樣。
三、靜態(tài)類
1、被static關(guān)鍵字修飾的類。
2、靜態(tài)類里面只能聲明靜態(tài)成員。
3、靜態(tài)類的本質(zhì),是一個(gè)抽象的密封類,所以不能被繼承,也不能被實(shí)例化。
4、如果一個(gè)類下面的所有成員,都需要被共享,那么可以把這個(gè)類定義為靜態(tài)類。
四、靜態(tài)構(gòu)造函數(shù)
1、這個(gè)類的成員,第一次被訪問之前,就會執(zhí)行靜態(tài)構(gòu)造函數(shù)。
2、靜態(tài)構(gòu)造函數(shù)只被執(zhí)行一次。
Eg:
class Program
{
public static int i =0;
public Program()
{
i = 1;
Console.Write("實(shí)例構(gòu)造方法被調(diào)用");
}
static Program()
{
i = 2;
Console.Write("靜態(tài)構(gòu)造函數(shù)被執(zhí)行");
}
static void Main(string[] args)
{
Console.Write(Program.i);//結(jié)果為2,首先,類被加載,所有的靜態(tài)成員被創(chuàng)建在靜態(tài)存儲區(qū),i=0,接著調(diào)用了類的成員,這時(shí)候靜態(tài)構(gòu)造函數(shù)就會被調(diào)用,i=2
Program p = new Program();
Console.Write(Program.i);//結(jié)果為1,實(shí)力化后,調(diào)用了實(shí)例構(gòu)造函數(shù),i=1,因?yàn)殪o態(tài)構(gòu)造函數(shù)只執(zhí)行一次,所以不會再執(zhí)行。
}
}
- C#靜態(tài)static的用法實(shí)例分析
- c# static 靜態(tài)數(shù)據(jù)成員
- c# static的全部用法收集整理
- C#靜態(tài)變量與實(shí)例變量實(shí)例分析
- C# 靜態(tài)變量與靜態(tài)方法實(shí)例研究
- 學(xué)習(xí)C#靜態(tài)函數(shù)及變量的一個(gè)精典例子與代碼
- C#靜態(tài)方法與非靜態(tài)方法實(shí)例分析
- C#中實(shí)現(xiàn)抽象類里建立靜態(tài)方法
- C#中靜態(tài)構(gòu)造函數(shù)的幾點(diǎn)說明介紹
- C#中static靜態(tài)變量的用法實(shí)例
相關(guān)文章
WPF利用CommunityToolkit.Mvvm實(shí)現(xiàn)級聯(lián)選擇器
這篇文章主要介紹了WPF如何利用CommunityToolkit.Mvvm實(shí)現(xiàn)級聯(lián)選擇器,文中的示例代碼講解詳細(xì),對我們的學(xué)習(xí)或工作有一定幫助,需要的小伙伴可以參考一下2023-12-12DevExpress的DateEdit設(shè)置顯示日期和時(shí)間的方法
本文主要介紹了DevExpress的DateEdit設(shè)置顯示日期和時(shí)間的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08深入理解C# abstract和virtual關(guān)鍵字
深入理解C# abstract和virtual關(guān)鍵字,學(xué)習(xí)c#的朋友可以參考下。2011-06-06c# WPF設(shè)置軟件界面背景為MediaElement并播放視頻
這篇文章主要介紹了c# WPF如何設(shè)置軟件界面背景為MediaElement并播放視頻,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-03-03C# datagridview、datagrid、GridControl增加行號代碼解析
今天這篇文章小編就來給大家分享關(guān)于C# datagridview、datagrid、GridControl增加行號的介紹,主要包括WinForm中datagridview增加行號、WPF中datagrid增加行號、WPF dev控件GridControl增加行號三個(gè)內(nèi)容,感興趣等我小伙伴可以參考一下2021-10-10c#關(guān)于JWT跨域身份驗(yàn)證的實(shí)現(xiàn)代碼
這篇文章主要介紹了c#關(guān)于JWT跨域身份驗(yàn)證的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10