【发布时间】:2020-05-25 12:54:53
【问题描述】:
我有课
class A
{
public void Greet()
{
Console.WriteLine("Hii");
}
}
class B : A
{
public void Greet2()
{
Console.WriteLine("Hello");
}
}
class Program
{
public static void main(string args[])
{
B b = new B();
b.Greet();
b.Greet2();
}
}
如何在堆空间中为基类和派生类分配内存。派生类是拥有基类的所有方法还是拥有基类的对象?
【问题讨论】:
-
方法的处理方式和变量的内存处理方式是有区别的。为该类型的所有字段分配一个连续的内存区域,包括基类的所有字段。此外,内存中还有一块内存用于该类型,分配一次,其中包含虚拟方法表,其中包括该类型和基类的所有虚拟方法。
-
非虚拟方法不以任何特定方式处理。相反,定义一次的原始方法将被调用,即使通过派生类调用,只需将
this引用传递给派生类型。 -
基类B被实例化时,也就是A类也称为类构造函数,内存分别分配给A类和B类
-
@RezaJenabi 你能详细解释一下吗
标签: c# inheritance heap-memory