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