虛擬內(nèi)存總體劃分為五大區(qū)域:棧區(qū)(堆棧)救赐,堆區(qū)(托管堆)尿这,常量,靜態(tài)(靜態(tài)初始化允瞧,靜態(tài)未初始化)简软,代碼區(qū)
* 棧區(qū):有計算機(jī)虛擬內(nèi)存自動進(jìn)行釋放管理,棧區(qū)的存儲方式為先進(jìn)后出述暂。用于分配值類型痹升。棧由操作系統(tǒng)進(jìn)行管理,不受GC(垃圾回收機(jī)制)管理畦韭。當(dāng)值類型不在作用域疼蛾,? ?其所在的內(nèi)存空間自動釋放,棧的執(zhí)行效率最高艺配。
堆區(qū):用于分配小對象實(shí)例(85000)察郁,所謂小對象就是小于85000字節(jié)的實(shí)力對象。? GC堆分三代垃圾管理進(jìn)行管理转唉,當(dāng)操作時(垃圾回收的時候)皮钠,垃圾收集器會對GC堆進(jìn)行壓縮回收。原理有點(diǎn)類似于ios中的autorelease(自動釋放池)
?大對象堆(large object heap):大對象就是指大小超過85000個字節(jié)的實(shí)力對象赠法,大部分分配在LOH上麦轰,不受GC管理,不會被壓縮砖织,只有在完全GC回收時才會被回收
ps:棧的分配是高位-->低位進(jìn)行擴(kuò)展
? ? ? ?堆的分配是低位-->高位進(jìn)行擴(kuò)展
值類型參數(shù)與引用參數(shù)的本質(zhì)款侵,值參數(shù)是對棧中數(shù)據(jù)進(jìn)行拷貝,拷貝出來的數(shù)據(jù)相當(dāng)于之前數(shù)據(jù)的副本侧纯,引用類型是對棧中數(shù)據(jù)地址的引用新锈,當(dāng)值參數(shù)為某對象引用時,可以改變該對象的某些值茂蚓,但是不能將值變成新對象的地址
面向?qū)ο笾庋b
封裝特性:
為什么要封裝壕鹉?
?屬性存在的目的:其實(shí)就是巍峨保護(hù)類的內(nèi)部結(jié)構(gòu)不被破壞,達(dá)到封裝性聋涨。
?屬性的語法格式:
?訪問修飾符public(必須) +對應(yīng)字段的數(shù)據(jù)類型+字段名稱(首字母必須大寫 )
?{
?}
?屬性本身就是一種特殊的方法晾浴,他沒有返回值,是因?yàn)閷傩詢?nèi)部提供了可以訪問該屬性的
?ref參數(shù):將值類型引用改變?yōu)榈刂芬?/p>
?值類型作為參數(shù)傳遞的時候牍白,傳遞的不是本身脊凰,而是副本,如果要修改本身的值就需要修改為引用傳遞
?string 雖然本身是引用類型,但是作為參數(shù)傳遞的時候默認(rèn)是值傳遞狸涌,而不是引用傳遞切省。?如果想改變原來的字符串,這個時候就要將值類型改為引用傳遞帕胆,加上ref關(guān)鍵字朝捆。?如果你不想改變原來的字符串,就直接傳遞字符串
? object本身就是引用類型懒豹,它和字符串不一樣芙盘,它默認(rèn)就是引用傳遞,也就是傳遞的是地址脸秽。
?數(shù)組作為參數(shù)傳遞時也是引用傳遞.
out參數(shù):輸出到的意思,其實(shí)就是保存一個數(shù)值在其中
面向?qū)ο笾^承
繼承:
繼承使用條件:當(dāng)你設(shè)計類的時候儒老,發(fā)現(xiàn)有字段重復(fù)。
具有相同特征不同行為的可以抽取出來记餐,單獨(dú)稱為一個類驮樊,這個類供派生類使用。
簡稱:基類片酝。
在現(xiàn)實(shí)生活中繼承的關(guān)系有很多
?1.兒子繼承父親
?2.黃燜雞米飯
3....
在程序中使用關(guān)鍵符號:表示繼承
格式:(:+類)
?這個類是要繼承的類
繼承關(guān)系中的特點(diǎn):
?1.子類可以繼承父類中的公有字段
?2.子類可以繼承父類中的公有屬性
?3.子類可以繼承父類中的公有函數(shù)
?4.父類不能擁有子類的字段/方法/屬性/索引器
?5.在C#中不支持多重繼承,也就是一個類只能繼承一個類,如果你向支持多繼承,那么請使用interface
?繼承關(guān)系中的構(gòu)造函數(shù)
?1.在繼承關(guān)系中首先會調(diào)用父類的構(gòu)造函數(shù),然后再調(diào)用子類的構(gòu)造函數(shù)
?2.在繼承關(guān)系中,子類初始化對象時,先調(diào)用父類的構(gòu)造函數(shù),然后再看子類構(gòu)造函數(shù)有沒有顯式(:base()關(guān)鍵字)通知編譯器指定調(diào)用父類的哪個構(gòu)造函數(shù),如果沒有,那么默認(rèn)去調(diào)用父類的無參數(shù)構(gòu)造函數(shù).此時如果父類重寫了帶有參數(shù)的構(gòu)造函數(shù),程序編譯不通過,那么解決的辦法就是給父類添加無參數(shù)構(gòu)造函數(shù)或者在子類構(gòu)造函數(shù)中聲明指定調(diào)用的哪個父類的構(gòu)造函數(shù)
public class Boss
{
public string name;
public string jineng;
public Boss ()
{
Console.WriteLine ("父類構(gòu)造方法被調(diào)用");
}
public Boss(string name,string jineng){
this.name = name;
Console.WriteLine (name);
Console.WriteLine ("父類構(gòu)造方法被調(diào)用2");
}
}
class Boss_x:Boss
{
public Boss_x(string name,string jineng):base(name,jineng)//將參數(shù)傳遞給指定父類構(gòu)造方法
{
Console.WriteLine ("子類構(gòu)造方法被調(diào)用");
}
public Boss_x()
{
}
public static void Main()
{
Boss_x b = new Boss_x ();//當(dāng)執(zhí)行這段代碼時,調(diào)用父類無參數(shù)的構(gòu)造方法
Boss_x b1 = new Boss_x("das","a");//當(dāng)這段代碼執(zhí)行時囚衔,調(diào)用父類有參數(shù)的構(gòu)造方法
}
}