Продолжая аналогию с тем, что объект — это воздушный шар, а ссылка — это веревка, привязанная к воздушному шару, в каждом из следующих случаев будет один шарик и одна веревка:
ClassB b = new ClassB(); //one reference, one heap object
ClassA a = new ClassB(); //one reference, one heap object
Запуск обоих одновременно создаст два объекта и две ссылки.
ИЗМЕНИТЬ Посмотрите на этот IL, сгенерированный из конструктора ClassB
:
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 7 (0x7)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void InheritanceTest.ClassA::.ctor()
IL_0006: ret
} // end of method ClassB::.ctor
call instance void InheritanceTest.ClassA::.ctor()
указывает, что он вызывает конструктор ClassA
как функцию-член (а не как функцию объекта-члена). Это соответствует моему пониманию того, что происходит с экземплярами унаследованных классов, что производный класс — это просто все члены базового класса, за которыми следуют его собственные члены, аналогично C++.
person
Igor Zevaka
schedule
29.07.2010
new
равно еще одному созданному объекту. - person Matt Greer   schedule 29.07.2010