// 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();
}
}
Wynik to:
Nazywany Special Derived.
Nazywany od Derived. / * to nie jest oczekiwane * /
Zadzwoniono z bazy.
Jak mogę przepisać klasę SpecialDerived, aby metoda klasy średniej „Derived” nie była wywoływana?
AKTUALIZACJA:
Powodem, dla którego chcę dziedziczyć po Derived zamiast Base jest klasa pochodna, która zawiera wiele innych implementacji. Ponieważ nie mogę tego zrobić base.base.method()
, myślę, że najlepszym sposobem jest wykonanie następujących czynności?
// Nie można zmienić kodu źródłowego
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.");
}
}