Voulez-vous profiter de l'analogie que l'objet est un ballon et la référence est une chaîne est lié à la baloon, dans chacun des cas suivants il y aurait un balolon et une chaîne:
ClassB b = new ClassB(); //one reference, one heap object
ClassA a = new ClassB(); //one reference, one heap object
Courir les deux en même temps va donc créer deux objets et deux références.
EDIT Jetez un oeil à cette IL produite à partir ClassB
constructeur:
.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()
indique qu'il appelle ClassA
constructeur en fonction de membre (non en fonction d'un objet membre). Ceci est en accord avec ma compréhension de ce qui se passe avec les instances de classes héritées, que la classe dérivée est simplement tous les membres de la classe de base, suivis de ses propres membres, de la même manière que C++.
Ce serait deux instances. Chaque utilisation de 'new' est égale à un objet instancié. –