C# 是否为每个新实例实例化基类?
我一直在思考CLR如何创建新实例。考虑这个代码: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
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#,但通常适用于面向对象语言。