Ich bin nicht klar darüber, warum die SecondChild
Klasse DoSomething
nicht erneut aufgerufen wird, wenn Child
Klasse initialisiert wird.Warum überschreiben Methode der SecondChild-Klasse wird nicht zweimal aufgerufen?
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();
}
}
Ich hatte erwartet, dass DoSomething()
von SecondChild
zweimal hier genannt werden, sondern Child
Klasse DoSomething()
aufgerufen, dieNullException geben wird.
Bitte verwenden Sie einen Debugger: Sie erstellen nur _one_ 'SecondChild' Instanz. In diesem Konstruktor erstellen Sie eine _'Child'_ -Instanz (kein 'SecondChild'). Warum sollte also' SecondChild.DoSomething() 'zweimal aufgerufen werden? –
Sie sollten die tatsächliche und die erwartete Ausgabe der Frage hinzufügen. Lesen Sie auch http://stackoverflow.com/questions/119506/virtual-member-call-in-a-constructor, es könnte einige Dinge erklären – grek40
Fügen Sie erwartete und tatsächliche Ausgaben hinzu. "Wieder angerufen" ist zu unscharf. –