namespace SOLID_PRINCIPLES.OCP
public virtual double GetInvoiceDiscount(double amount)
public class FinalInvoice : Invoice
public override double GetInvoiceDiscount(double amount)
return base.GetInvoiceDiscount(amount) - 50;
public class ProposedInvoice : Invoice
public override double GetInvoiceDiscount(double amount)
return base.GetInvoiceDiscount(amount) - 40;
public class RecurringInvoice : Invoice
public override double GetInvoiceDiscount(double amount)
return base.GetInvoiceDiscount(amount) - 30;
namespace SOLID_PRINCIPLES.OCP
static void Main(string[] args)
Invoice FInvoice = new FinalInvoice();
Invoice PInvoice = new ProposedInvoice();
Invoice RInvoice = new RecurringInvoice();
double FInvoiceAmount = FInvoice.GetInvoiceDiscount(10000);
double PInvoiceAmount = PInvoice.GetInvoiceDiscount(10000);
double RInvoiceAmount = RInvoice.GetInvoiceDiscount(10000);
Console.WriteLine(FInvoiceAmount);
Console.WriteLine(PInvoiceAmount);
Console.WriteLine(RInvoiceAmount);