A class implements an interface by defining every required member.

implementation An implementation is the class code that satisfies an interface contract.

Implementing Interfaces

discount
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}");
    }
}
  1. 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);
  2. this.discount ← 15

    12public FlatDiscount(int discount15)13{14    this.discount→ 15 = discount15;15}
  3. rule ← FlatDiscount

    27int discount = 15; //@discount=5, 2528FlatDiscount rule→ FlatDiscount = new FlatDiscount(discount);29int finalPrice = ruleFlatDiscount.Apply(100);
  4. public int Apply(int cents)

    17public int Apply(int cents100)18{19    return cents100 - discount15;20}
  5. 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
  1. 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);
  2. this.discount ← 5

    12public FlatDiscount(int discount5)13{14    this.discount→ 5 = discount5;15}
  3. rule ← FlatDiscount

    27int discount = 5;28FlatDiscount rule→ FlatDiscount = new FlatDiscount(discount);29int finalPrice = ruleFlatDiscount.Apply(100);
  4. public int Apply(int cents)

    17public int Apply(int cents100)18{19    return cents100 - discount5;20}
  5. 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
  1. 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);
  2. this.discount ← 25

    12public FlatDiscount(int discount25)13{14    this.discount→ 25 = discount25;15}
  3. rule ← FlatDiscount

    27int discount = 25;28FlatDiscount rule→ FlatDiscount = new FlatDiscount(discount);29int finalPrice = ruleFlatDiscount.Apply(100);
  4. public int Apply(int cents)

    17public int Apply(int cents100)18{19    return cents100 - discount25;20}
  5. 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