base class 是否为每个新实例实例化?
Does base class gets instantiated for every new instance?
我一直在思考CLR是如何创建新实例的。考虑这段代码:
public class Base
{
public Base()
{ }
}
public class Derived : Base
{
public Derived()
: base()
{ }
}
这些是我的问题:
var baseObj = new Base();
这行代码每次都会创建一个System.Object
实例吗?内存中有多少实例?是 2 还是 1?
对于这行代码:var derObj = new Derived();
。将创建多少个实例?是3还是2?
在两个样本中,只有一个对象。只分配了一块内存,基础 class 'merges' 及其父项。只有一个 class 包含从基础 classes 派生的所有方法、字段和属性,包括 base-class-of-all。 object
.
如果 var derivedObj = new Derived();
创建两个实例,您认为会发生什么情况?没有赋值给baseObj
的怎么引用?让 classes 的两个实例保持活动状态是没有用的。一个就行了。
我一直在思考CLR是如何创建新实例的。考虑这段代码:
public class Base
{
public Base()
{ }
}
public class Derived : Base
{
public Derived()
: base()
{ }
}
这些是我的问题:
var baseObj = new Base();
这行代码每次都会创建一个System.Object
实例吗?内存中有多少实例?是 2 还是 1?对于这行代码:
var derObj = new Derived();
。将创建多少个实例?是3还是2?
在两个样本中,只有一个对象。只分配了一块内存,基础 class 'merges' 及其父项。只有一个 class 包含从基础 classes 派生的所有方法、字段和属性,包括 base-class-of-all。 object
.
如果 var derivedObj = new Derived();
创建两个实例,您认为会发生什么情况?没有赋值给baseObj
的怎么引用?让 classes 的两个实例保持活动状态是没有用的。一个就行了。