Je ne comprends pas pourquoi la classe SecondChild
DoSomething
ne sera plus appelée lorsque la classe Child
sera initialisée.Pourquoi la méthode de substitution de la classe SecondChild n'est pas invoquée deux fois?
class Parent
{
public Parent()
{
DoSomething();
}
protected virtual void DoSomething()
{
Console.WriteLine("Parent Method");
}
}
class Child : Parent
{
private string foo;
public Child()
{
foo = "HELLO";
}
protected override void DoSomething()
{
Console.WriteLine(foo.ToLower());
}
}
class SecondChild : Parent
{
public SecondChild()
{
var c = new Child();
}
protected override void DoSomething()
{
Console.WriteLine("In second Child");
}
}
class Program
{
static void Main(string[] args)
{
SecondChild c = new SecondChild();
Console.ReadLine();
}
}
Je me attendais à ce que DoSomething()
de SecondChild
sera appelé deux fois, mais à la place Child
classe DoSomething()
est invoquée qui donnera NullException.
Veuillez utiliser un débogueur: Vous créez uniquement l'instance _one_ 'SecondChild'. Dans ce constructeur, vous créez une instance _'Child'_ (pas un 'SecondChild'), alors pourquoi' SecondChild.DoSomething() 'devrait être appelé deux fois? –
Vous devez inclure les résultats réels et attendus à la question. Aussi, lisez http://stackoverflow.com/questions/119506/virtual-member-call-in-a-constructor, cela pourrait expliquer certaines choses – grek40
Ajouter les sorties attendues et réelles. "appelé à nouveau" est trop flou. –