// Cannot change source code
class Base
{
public virtual void Say()
{
Console.WriteLine("Called from Base.");
}
}
// Cannot change source code
class Derived : Base
{
public override void Say()
{
Console.WriteLine("Called from Derived.");
base.Say();
}
}
class SpecialDerived : Derived
{
public override void Say()
{
Console.WriteLine("Called from Special Derived.");
base.Say();
}
}
class Program
{
static void Main(string[] args)
{
SpecialDerived sd = new SpecialDerived();
sd.Say();
}
}
Das Ergebnis ist:
Wird von Special Derived aufgerufen.
Von Derived aufgerufen. / * dies wird nicht erwartet * /
Wird von der Basis aufgerufen.
Wie kann ich die SpecialDerived-Klasse so umschreiben, dass die Methode "Derived" der Mittelklasse nicht aufgerufen wird?
UPDATE:
Der Grund, warum ich von Derived anstelle von Base erben möchte, ist, dass die Derived-Klasse viele andere Implementierungen enthält. Da ich base.base.method()
hier nicht kann , denke ich, ist der beste Weg, Folgendes zu tun?
// Quellcode kann nicht geändert werden
class Derived : Base
{
public override void Say()
{
CustomSay();
base.Say();
}
protected virtual void CustomSay()
{
Console.WriteLine("Called from Derived.");
}
}
class SpecialDerived : Derived
{
/*
public override void Say()
{
Console.WriteLine("Called from Special Derived.");
base.Say();
}
*/
protected override void CustomSay()
{
Console.WriteLine("Called from Special Derived.");
}
}