靜態(tài)類和非靜態(tài)類的區(qū)別 靜態(tài)成員函數(shù)為什么不能訪問本類中的非靜態(tài)成員?
靜態(tài)成員函數(shù)為什么不能訪問本類中的非靜態(tài)成員?程序最終將在內(nèi)存中執(zhí)行,變量只有在占用內(nèi)存中的某個(gè)位置時(shí)才能被訪問。類的靜態(tài)成員(變量和方法)屬于類本身,在加載類時(shí)會(huì)分配內(nèi)存,可以通過類名直接訪問內(nèi)存。
靜態(tài)成員函數(shù)為什么不能訪問本類中的非靜態(tài)成員?
程序最終將在內(nèi)存中執(zhí)行,變量只有在占用內(nèi)存中的某個(gè)位置時(shí)才能被訪問。類的靜態(tài)成員(變量和方法)屬于類本身,在加載類時(shí)會(huì)分配內(nèi)存,可以通過類名直接訪問內(nèi)存。非靜態(tài)成員(變量和方法)屬于類對(duì)象,因此只有在生成類對(duì)象(創(chuàng)建類實(shí)例)然后通過類對(duì)象(實(shí)例)訪問時(shí)才會(huì)分配內(nèi)存。在靜態(tài)成員中訪問類的非靜態(tài)成員時(shí)出錯(cuò)的原因是,當(dāng)該類的非靜態(tài)成員不存在時(shí),該類的靜態(tài)成員已經(jīng)存在。當(dāng)然,訪問內(nèi)存中不存在的東西時(shí)會(huì)出錯(cuò):類ca{私人:INTA//靜態(tài)類和非靜態(tài)類之間的主要區(qū)別在于靜態(tài)類不能被實(shí)例化,靜態(tài)類編譯器可以執(zhí)行檢查以確保實(shí)例成員不是意外添加的,而C#編譯器將自動(dòng)將其標(biāo)記為密封。不能在靜態(tài)類中創(chuàng)建非靜態(tài)類只有靜態(tài)方法可以在靜態(tài)方法中創(chuàng)建,但是可以在非靜態(tài)類中調(diào)用靜態(tài)方法。靜態(tài)類的主要功能:
1:只包含靜態(tài)成員。
2:無法實(shí)例化。
3:它是密封的。
4:不能包含實(shí)例構(gòu)造函數(shù)。
5:非靜態(tài)類可以包含靜態(tài)方法、字段、屬性或事件;
6:靜態(tài)方法和屬性不能訪問其包含類型中的非靜態(tài)字段和事件。7:靜態(tài)方法只能重載,但不能重寫,因?yàn)殪o態(tài)方法不屬于類的實(shí)例成員。8:C#不支持靜態(tài)局部變量(靜態(tài)變量在方法中定義)。非靜態(tài)類在使用時(shí)必須實(shí)例化,并且每次使用時(shí)都必須實(shí)例化。一般來說,諸如logclass、configclass等靜態(tài)類可以用于經(jīng)常使用的類。