// 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();
}
}
परिणाम है:
विशेष व्युत्पन्न से कहा जाता है।
व्युत्पन्न से बुलाया। / * यह अपेक्षित नहीं है * /
आधार से ।
मैं विशेष श्रेणी को फिर से कैसे लिख सकता हूं ताकि मध्यम वर्ग "व्युत्पन्न" की विधि को न कहा जाए?
अद्यतन:
मैं आधार के बजाय व्युत्पन्न से प्राप्त करना चाहता हूं, इसका कारण यह है कि व्युत्पन्न वर्ग में बहुत सारे अन्य कार्यान्वयन हैं। जब से मैं base.base.method()यहाँ नहीं कर सकता , मुझे लगता है कि निम्नलिखित करने का सबसे अच्छा तरीका है?
// सोर्स कोड नहीं बदल सकता
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.");
}
}