标签:arch bubuko 程序 通过 不同的 ati 了解 技术 logs
最近偶然看到这个博客你必须知道的.net,作者6的飞起啊,干货十足,还是07年写的。。。写的也很赞,评论更精彩,在此强烈推荐一波,看的感觉就像沙漠里发现了绿洲一样,很兴奋,意犹未尽,迫不及待的看完一篇再看下一篇,但是知识还是需要整理,沉淀的,那就写博客吧,于是有了接下来的文章。本文将通过看此书和相关博客以及结合自己目前的理解所写,如有不对之处,欢迎指正。
要了解继承的本质首先我们要清楚一个对象的创建过程,这里有个 Chicken 类:
public class Chicken
{
private string type = "Chicken";
public Chicken()
{
}
public void ShowType()
{
Console.WriteLine($"Type is {type}");
}
}
当我们需要使用这个类的时候,我们通常是这样写的:
Chicken chicken = new Chicken();
它是如何工作的呢?先上图:
具体过程如下:
3.最后将this赋值给Stack上的chicken引用类型,即chicken维护一个指向heap上Chicken实例的指针,实际stact上的chicken存储的是GCHeap上实例存储的地址;
如果你看到这里,那说明你已经对一个对象的创建过程有了清晰的认识。回归主题那继承的本质是什么?先别急,下面我们写一个 Animal 类,让上文中的Chicken类继承它,并重写父类中的ShowType方法,本示例代码参考书中示例略微有所调整代码如下:
public class Animal
{
private string type ="Animal";
public Animal()
{
}
public virtual void ShowType()
{
Console.WriteLine($"Type is {type}");
}
}
public class Chicken : Animal
{
public string type = "Chicken";
public Chicken()
{
}
public override void ShowType()
{
Console.WriteLine($"Type is {type}");
}
}
那么这个时候我们去执行 Chicken chicken = new Chicken(); 发生了什么呢?
根据上图我们可以很直观的看出(此处暂时不考虑Object):
写这篇博客参考了不少其它牛人的博客,发现关于这块往深里东西还有很多,如AppDomain应用程序域,ManagerHeap可以分多种不同的类型,GC对不同的Heap处理规则也是不同的,近期也会持续分享相关内容。写博文期间内容也不断反复调整了几轮,希望在此我都表达清楚了,限于篇幅主要内容还是关于对象和继承的本质过程,内容基本上也都是根据自己的理解写出来的,难免有疏漏的地方,如有不对的对方还请指出,那将是我不断进步的源泉:-)。
标签:arch bubuko 程序 通过 不同的 ati 了解 技术 logs
原文地址:https://www.cnblogs.com/Nuss/p/8748666.html