.NET中的靜態(tài)與非靜態(tài)的區(qū)別分析
靜態(tài)類(lèi) vs 普通類(lèi)
靜態(tài)類(lèi)與普通類(lèi)的區(qū)別有以下幾點(diǎn):
1)靜態(tài)類(lèi)無(wú)法實(shí)例化而普通類(lèi)可以;
2)靜態(tài)類(lèi)只能從System.Object基類(lèi)繼承;普通可以繼承其它任何非static和非sealed類(lèi),但也只能繼承一個(gè)類(lèi);
3)靜態(tài)類(lèi)不能繼承接口;普通類(lèi)可以繼承多個(gè)接口;
4)靜態(tài)類(lèi)只能包含靜態(tài)成員;普通類(lèi)可以包含靜態(tài)和非靜態(tài)成員;
5)靜態(tài)類(lèi)不能作為字段,方法參數(shù)和局部變量使用;普通類(lèi)可以;
靜態(tài)類(lèi)的意義:
可以用靜態(tài)類(lèi)封裝一組不與任何對(duì)象相關(guān)聯(lián)的方法,如Math類(lèi),Console類(lèi)。
靜態(tài)構(gòu)造函數(shù) vs 實(shí)例構(gòu)造函數(shù)
靜態(tài)構(gòu)造函數(shù)與實(shí)例構(gòu)造函數(shù)的區(qū)別有以下幾點(diǎn):
1)靜態(tài)構(gòu)造函數(shù)屬于類(lèi),在第一次用到該類(lèi)時(shí)執(zhí)行且只執(zhí)行一次;實(shí)例構(gòu)造函數(shù)屬于對(duì)象,在每次初始化一個(gè)新對(duì)象的時(shí)候都會(huì)執(zhí)行;
2)靜態(tài)構(gòu)造函數(shù)只能定義一次,且不能包含參數(shù);實(shí)例構(gòu)造函數(shù)可以定義重載,且可以包含參數(shù);
3)靜態(tài)構(gòu)造函數(shù)只能訪問(wèn)類(lèi)型的靜態(tài)字段;實(shí)例構(gòu)造函數(shù)可以訪問(wèn)類(lèi)型的靜態(tài)和非靜態(tài)字段;
4)靜態(tài)類(lèi)不能包含訪問(wèn)修飾符,默認(rèn)為private.
靜態(tài)構(gòu)造函數(shù)的意義:
設(shè)置類(lèi)型的初始化,例如初始化類(lèi)型需要的實(shí)例對(duì)象,為類(lèi)型的靜態(tài)字段賦值等。
靜態(tài)方法 vs 實(shí)例方法
靜態(tài)方法與實(shí)例方法的區(qū)別有以下幾點(diǎn):
1)靜態(tài)方法屬于類(lèi),通過(guò)類(lèi)來(lái)調(diào)用;實(shí)例方法屬于對(duì)象,通過(guò)對(duì)象來(lái)調(diào)用;
2)靜態(tài)方法不能訪問(wèn)類(lèi)的非靜態(tài)成員;
靜態(tài)方法的意義:
完成一個(gè)與特定對(duì)象無(wú)關(guān)的功能。
靜態(tài)字段 vs 非靜態(tài)字段
靜態(tài)字段與非靜態(tài)字段的區(qū)別:
靜態(tài)字段屬于類(lèi),通過(guò)類(lèi)來(lái)調(diào)用;非靜態(tài)字段屬于對(duì)象,通過(guò)對(duì)象來(lái)調(diào)用。
靜態(tài)字段的意義:
可以用靜態(tài)字段來(lái)記錄一些屬于類(lèi)本身的信息。
代碼演示
public class Test
{
public int i = 10;
public static int j = 20;
public int k;
public Test()
{
Console.WriteLine("i is a non-static field, its value is {0}", i);
Console.WriteLine("j is a static field, its value is {0}", j);
}
public Test(int k)
{
this.k = k;
Console.WriteLine("i is a non-static field, its value is {0}", i);
Console.WriteLine("j is a static field, its value is {0}", j);
Console.WriteLine("k is a non-static field, its value is {0}", k);
}
static Test()
{
Console.WriteLine("I am a static constructor, I couldn't contain any parameters!");
Console.WriteLine("I couldn't access to the non-static field i, I can only access to the static field j, the value of j is {0}", j);
}
public void Print()
{
Console.WriteLine("I am a instance method, I can access both the non-static field and the static field!");
Console.WriteLine("The value of i is {0} and the value of j is {1}", i, j);
}
public static void StaticPrint()
{
Console.WriteLine("I am a static method, I couldnt access to the non-static field i, I can only access to the static field j, the value of j is {0}", j);
}
}
運(yùn)行結(jié)果
從運(yùn)行結(jié)果可以看出,在Main方法中創(chuàng)建了兩個(gè)Test對(duì)象,靜態(tài)構(gòu)造函數(shù)只執(zhí)行了一次,且先于實(shí)例構(gòu)造函數(shù)執(zhí)行,實(shí)例構(gòu)造函數(shù)在兩次實(shí)例化過(guò)程中各執(zhí)行了一次。同時(shí)可以看到我們是通過(guò)Test.j來(lái)調(diào)用的j字段,而i字段和k字段的調(diào)用則通過(guò)Test的兩個(gè)對(duì)象t1和t2調(diào)用。同樣的,靜態(tài)方法StaticPrint也是用Test類(lèi)來(lái)調(diào)用,而實(shí)例方法Print通過(guò)Test類(lèi)的對(duì)象來(lái)調(diào)用。
Fighting like Allen Iverson! Never never give up!
相關(guān)文章
FTPClientHelper輔助類(lèi) 實(shí)現(xiàn)文件上傳,目錄操作,下載等操作
這篇文章主要分享了一個(gè)FTPClientHelper輔助類(lèi)和介紹了常用的FTP命令,需要的朋友可以參考下。2016-06-06深入解析C#中的交錯(cuò)數(shù)組與隱式類(lèi)型的數(shù)組
這篇文章主要介紹了深入解析C#中的交錯(cuò)數(shù)組與隱式類(lèi)型的數(shù)組,隱式類(lèi)型的數(shù)組通常與匿名類(lèi)型以及對(duì)象初始值設(shè)定項(xiàng)和集合初始值設(shè)定項(xiàng)一起使用,需要的朋友可以參考下2016-01-01c# 應(yīng)用事務(wù)的簡(jiǎn)單實(shí)例
這篇文章介紹了c# 應(yīng)用事務(wù)的簡(jiǎn)單實(shí)例,有需要的朋友可以參考一下2013-09-09C# XML基礎(chǔ)入門(mén)小結(jié)(XML文件內(nèi)容增刪改查清)
本文主要介紹了C# XML基礎(chǔ)入門(mén)小結(jié)(XML文件內(nèi)容增刪改查清),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04C#實(shí)現(xiàn)啟動(dòng)項(xiàng)管理的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)啟動(dòng)項(xiàng)管理,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以了解一下2022-12-12C#基于數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程的AJAX分頁(yè)實(shí)例
這篇文章主要介紹了C#基于數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程的AJAX分頁(yè)實(shí)現(xiàn)方法,以實(shí)例形式詳細(xì)講述了數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程的定義、數(shù)據(jù)庫(kù)的訪問(wèn)及Ajax的實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-01-01C#實(shí)現(xiàn)將CSV轉(zhuǎn)為XLSX文件
Microsoft?Excel的XLSX格式以及基于文本的CSV(逗號(hào)分隔值)格式,是數(shù)據(jù)交換中常見(jiàn)的文件格式,本文主要介紹了如何在C#中以編程的方式將CSV文件轉(zhuǎn)化為XLSX?文件,需要的可以參考下2024-03-03C#強(qiáng)制類(lèi)型轉(zhuǎn)換小結(jié)
任何一門(mén)編程語(yǔ)言均有相關(guān)數(shù)據(jù)類(lèi)型。C#也不例外,不過(guò)轉(zhuǎn)換過(guò)程要注意小類(lèi)型能轉(zhuǎn)換成大類(lèi)型,但大類(lèi)型一般不能轉(zhuǎn)換成小類(lèi)型,下面小編給大家詳解C#強(qiáng)制類(lèi)型轉(zhuǎn)換小結(jié),需要的朋友參考下吧2017-07-07