// 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.");
}
}