C# 是否为每个新实例实例化基类?

C# 是否为每个新实例实例化基类?,c#,.net,c#-4.0,clr,C#,.net,C# 4.0,Clr,我一直在思考CLR如何创建新实例。考虑这个代码: public class Base { public Base() { } } public class Derived : Base { public Derived() : base() { } } 以下是我的问题: 是否每次为这行代码创建一个System.Object实例,var baseObj=new Base()?内存中有多少实例?是2号还是1号 对于这行代码:var derObj=n

我一直在思考CLR如何创建新实例。考虑这个代码:

public class Base
{
    public Base()
    { }
}

public class Derived : Base
{
    public Derived()
        : base()
    { }
}
以下是我的问题:

  • 是否每次为这行代码创建一个
    System.Object
    实例,
    var baseObj=new Base()?内存中有多少实例?是2号还是1号

  • 对于这行代码:
    var derObj=new-Derived()。将创建多少个实例?是3点还是2点


  • 在两个示例中,只有一个对象。只分配了一块内存,基类与其父类“合并”。只有一个类包含从基类派生的所有方法、字段和属性,包括所有基类的基类<代码>对象


    如果
    var-derivedObj=new-Derived(),您认为会发生什么创建两个实例?如何引用未分配给
    baseObj
    ?保持类的两个实例处于活动状态是没有用的。只有一个就可以了。

    1和1。
    派生的
    实例是一个
    实例,
    实例本身就是一个
    对象
    。只有一个实例;它将在内存中包含其基类层次结构的所有字段和方法。我认为你部分是正确的。我假设内存中有一个托管System.Object实例,并且有两个System.Object实例,每个基一个,堆上有一个派生的。Base和DERIVED都会在堆栈上保留相应的符号引用。还请注意,这种解释并不特定于C#,但通常适用于面向对象语言。