Interfaces and Abstractions
Implementing Interfaces
A class implements an interface by defining every required member.
implementation
An implementation is the class code that satisfies an interface contract.
Implementing Interfaces
ImplementingInterfaces.cs
Replay: real traced execution (multi-file project)
using System;
interface IDiscount
{
int Apply(int cents);
}
class FlatDiscount : IDiscount
{
private readonly int discount;
public FlatDiscount(int discount)
{
this.discount = discount;
}
public int Apply(int cents)
{
return cents - discount;
}
}
class Program
{
static void Main()
{
int discount = 15;
FlatDiscount rule = new FlatDiscount(discount);
int finalPrice = rule.Apply(100);
Console.WriteLine($"discount={discount}");
Console.WriteLine($"final={finalPrice}");
}
}
using System;
interface IDiscount
{
int Apply(int cents);
}
class FlatDiscount : IDiscount
{
private readonly int discount;
public FlatDiscount(int discount)
{
this.discount = discount;
}
public int Apply(int cents)
{
return cents - discount;
}
}
class Program
{
static void Main()
{
int discount = 5;
FlatDiscount rule = new FlatDiscount(discount);
int finalPrice = rule.Apply(100);
Console.WriteLine($"discount={discount}");
Console.WriteLine($"final={finalPrice}");
}
}
using System;
interface IDiscount
{
int Apply(int cents);
}
class FlatDiscount : IDiscount
{
private readonly int discount;
public FlatDiscount(int discount)
{
this.discount = discount;
}
public int Apply(int cents)
{
return cents - discount;
}
}
class Program
{
static void Main()
{
int discount = 25;
FlatDiscount rule = new FlatDiscount(discount);
int finalPrice = rule.Apply(100);
Console.WriteLine($"discount={discount}");
Console.WriteLine($"final={finalPrice}");
}
}
discount ← 15
24{25 static void Main()26 {27 int discount→ 15 = 15; //@discount=5, 2528 FlatDiscount rule = new FlatDiscount(discount);29 int finalPrice = rule.Apply(100);this.discount ← 15
12public FlatDiscount(int discount15)13{14 this.discount→ 15 = discount15;15}rule ← FlatDiscount
27int discount = 15; //@discount=5, 2528FlatDiscount rule→ FlatDiscount = new FlatDiscount(discount);29int finalPrice = ruleFlatDiscount.Apply(100);public int Apply(int cents)
17public int Apply(int cents100)18{19 return cents100 - discount15;20}finalPrice ← 85
28 FlatDiscount rule = new FlatDiscount(discount);29 int finalPrice→ 85 = ruleFlatDiscount.Apply(100);3031 Console.WriteLine($"discount={discount15}");32 Console.WriteLine($"final={finalPrice85}");33}outputdiscount=15 final=85
discount ← 5
24{25 static void Main()26 {27 int discount→ 5 = 5;28 FlatDiscount rule = new FlatDiscount(discount);29 int finalPrice = rule.Apply(100);this.discount ← 5
12public FlatDiscount(int discount5)13{14 this.discount→ 5 = discount5;15}rule ← FlatDiscount
27int discount = 5;28FlatDiscount rule→ FlatDiscount = new FlatDiscount(discount);29int finalPrice = ruleFlatDiscount.Apply(100);public int Apply(int cents)
17public int Apply(int cents100)18{19 return cents100 - discount5;20}finalPrice ← 95
28 FlatDiscount rule = new FlatDiscount(discount);29 int finalPrice→ 95 = ruleFlatDiscount.Apply(100);3031 Console.WriteLine($"discount={discount5}");32 Console.WriteLine($"final={finalPrice95}");33}outputdiscount=5 final=95
discount ← 25
24{25 static void Main()26 {27 int discount→ 25 = 25;28 FlatDiscount rule = new FlatDiscount(discount);29 int finalPrice = rule.Apply(100);this.discount ← 25
12public FlatDiscount(int discount25)13{14 this.discount→ 25 = discount25;15}rule ← FlatDiscount
27int discount = 25;28FlatDiscount rule→ FlatDiscount = new FlatDiscount(discount);29int finalPrice = ruleFlatDiscount.Apply(100);public int Apply(int cents)
17public int Apply(int cents100)18{19 return cents100 - discount25;20}finalPrice ← 75
28 FlatDiscount rule = new FlatDiscount(discount);29 int finalPrice→ 75 = ruleFlatDiscount.Apply(100);3031 Console.WriteLine($"discount={discount25}");32 Console.WriteLine($"final={finalPrice75}");33}outputdiscount=25 final=75