Interfaces and Abstractions
Dependency Inversion
A method can depend on an interface instead of one concrete class.
Dependency Inversion
DependencyInversion.cs
using System;
interface IRatePlan
{
int Cost(int units);
}
class BasicPlan : IRatePlan
{
public int Cost(int units)
{
return units * 2;
}
}
class PremiumPlan : IRatePlan
{
public int Cost(int units)
{
return units * 3;
}
}
class Invoice
{
public int Total(IRatePlan plan, int units)
{
return plan.Cost(units);
}
}
class Program
{
static void Main()
{
int units = ;
Invoice invoice = new Invoice();
IRatePlan plan = new PremiumPlan();
int total = invoice.Total(plan, units);
Console.WriteLine($"units={units}");
Console.WriteLine($"total={total}");
}
}
using System;
interface IRatePlan
{
int Cost(int units);
}
class BasicPlan : IRatePlan
{
public int Cost(int units)
{
return units * 2;
}
}
class PremiumPlan : IRatePlan
{
public int Cost(int units)
{
return units * 3;
}
}
class Invoice
{
public int Total(IRatePlan plan, int units)
{
return plan.Cost(units);
}
}
class Program
{
static void Main()
{
int units = ;
Invoice invoice = new Invoice();
IRatePlan plan = new PremiumPlan();
int total = invoice.Total(plan, units);
Console.WriteLine($"units={units}");
Console.WriteLine($"total={total}");
}
}
using System;
interface IRatePlan
{
int Cost(int units);
}
class BasicPlan : IRatePlan
{
public int Cost(int units)
{
return units * 2;
}
}
class PremiumPlan : IRatePlan
{
public int Cost(int units)
{
return units * 3;
}
}
class Invoice
{
public int Total(IRatePlan plan, int units)
{
return plan.Cost(units);
}
}
class Program
{
static void Main()
{
int units = ;
Invoice invoice = new Invoice();
IRatePlan plan = new PremiumPlan();
int total = invoice.Total(plan, units);
Console.WriteLine($"units={units}");
Console.WriteLine($"total={total}");
}
}
dependency inversion
Dependency inversion passes behavior through an abstraction.