C#中new操作符的工作機(jī)制
使用new操作符來(lái)創(chuàng)建對(duì)象,其背后到底發(fā)生了什么?
有一個(gè)父類Animal,Dog派生于Animal。
class Program
{
static void Main(string[] args)
{
Dog dog = new Dog();
Console.WriteLine("我能調(diào)用老祖宗Object的實(shí)例方法GetType,顯示結(jié)果為:" + dog.GetType() );
Console.WriteLine("我能拿到父類的屬性Age=" + dog.Age);
Console.WriteLine("我當(dāng)然能拿到自己的公共字段_weight=" + dog._weight);
}
}
public class Animal
{
public int Age { get; set; }
public Animal(){}
}
public class Dog : Animal
{
public decimal _weight;
public Dog(){}
}
雖然創(chuàng)建了子類Dog的實(shí)例,但通過(guò)dog實(shí)例能調(diào)用"老祖宗"System.Object的實(shí)例方法,也能獲取到父類的公共屬性Age的值,并且所有的實(shí)例字段值為其類型的默認(rèn)值。
new操作符做的事情大致包括:
- 計(jì)算Dog類以及所有父類實(shí)例字段所占的字節(jié)數(shù)
- 計(jì)算Dog類以及所有父類"類型對(duì)象指針"和"同步塊索引"所占的字節(jié)數(shù)
- 根據(jù)字節(jié)數(shù),托管堆分配內(nèi)存
- 先調(diào)用所有父類的構(gòu)造函數(shù),最后調(diào)用Dog的構(gòu)造函數(shù)。在這過(guò)程中,初始化所有實(shí)例字段,字段值為字段類型的默認(rèn)值或構(gòu)造函數(shù)實(shí)參值;初始化"類型對(duì)象指針"和"同步塊索引"成員
- 把新建的Dog實(shí)例的堆地址賦值給棧變量dog
- 通過(guò)new創(chuàng)建的托管堆對(duì)象最終由GC回收
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
C#實(shí)現(xiàn)類似jQuery的方法連綴功能
這篇文章主要介紹了C#實(shí)現(xiàn)類似jQuery的方法連綴功能,可以簡(jiǎn)化語(yǔ)句,使代碼變得清晰簡(jiǎn)單,感興趣的小伙伴們可以參考一下2015-11-11
c#使用EPPlus將圖片流嵌入到Excel實(shí)現(xiàn)示例
這篇文章主要為大家介紹了c#使用EPPlus將圖片流嵌入到Excel實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
基于Avalonia實(shí)現(xiàn)自定義彈窗的示例詳解
對(duì)于使用avalonia的時(shí)候某些功能需要到一些提示,比如異?;蛘叱晒Χ夹枰獙?duì)用戶進(jìn)行提示,所以需要單獨(dú)實(shí)現(xiàn)彈窗功能,并且可以自定義內(nèi)部組件,這一期將手動(dòng)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的小彈窗,并且很容易自定義,希望大家喜歡2023-02-02
10個(gè)C#程序員經(jīng)常用到的實(shí)用代碼片段
如果你是一個(gè)C#程序員,那么本文介紹的10個(gè)C#常用代碼片段一定會(huì)給你帶來(lái)幫助,從底層的資源操作,到上層的UI應(yīng)用,這些代碼也許能給你的開發(fā)節(jié)省不少時(shí)間。以下是原文:2015-09-09
C#通過(guò)PInvoke調(diào)用c++函數(shù)的備忘錄的實(shí)例詳解
這篇文章主要介紹了C#通過(guò)PInvoke調(diào)用c++函數(shù)的備忘錄的實(shí)例以及相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們學(xué)習(xí)下。2019-08-08
C# 撒列實(shí)現(xiàn)關(guān)鍵字過(guò)濾的實(shí)例
C# 撒列實(shí)現(xiàn)關(guān)鍵字過(guò)濾的實(shí)例,需要的朋友可以參考一下2013-04-04
C#中Foreach循環(huán)遍歷的本質(zhì)與枚舉器詳解
這篇文章主要給大家介紹了關(guān)于C#中Foreach循環(huán)遍歷本質(zhì)與枚舉器的相關(guān)資料,foreach循環(huán)用于列舉出集合中所有的元素,foreach語(yǔ)句中的表達(dá)式由關(guān)鍵字in隔開的兩個(gè)項(xiàng)組成,本文通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-08-08

