A generic interface can describe behavior for a specific value type.

generic interface A generic interface uses a type parameter in its contract.

Generic Interfaces

value
GenericInterfaces.cs
Replay: real traced execution (multi-file project)
using System;

interface IFormatter<T>
{
    string Format(T value);
}

class IntFormatter : IFormatter<int>
{
    public string Format(int value)
    {
        return "value=" + value;
    }
}

class Program
{
    static void Main()
    {
        int value = 7;
        IFormatter<int> formatter = new IntFormatter();
        string formatted = formatter.Format(value);

        Console.WriteLine($"value={value}");
        Console.WriteLine($"formatted={formatted}");
    }
}
using System;

interface IFormatter<T>
{
    string Format(T value);
}

class IntFormatter : IFormatter<int>
{
    public string Format(int value)
    {
        return "value=" + value;
    }
}

class Program
{
    static void Main()
    {
        int value = 3;
        IFormatter<int> formatter = new IntFormatter();
        string formatted = formatter.Format(value);

        Console.WriteLine($"value={value}");
        Console.WriteLine($"formatted={formatted}");
    }
}
using System;

interface IFormatter<T>
{
    string Format(T value);
}

class IntFormatter : IFormatter<int>
{
    public string Format(int value)
    {
        return "value=" + value;
    }
}

class Program
{
    static void Main()
    {
        int value = 11;
        IFormatter<int> formatter = new IntFormatter();
        string formatted = formatter.Format(value);

        Console.WriteLine($"value={value}");
        Console.WriteLine($"formatted={formatted}");
    }
}
  1. value ← 7, formatter ← IntFormatter

    17{18    static void Main()19    {20        int value→ 7 = 7; //@value=3, 1121        IFormatter<int> formatter→ IntFormatter = new IntFormatter();22        string formatted = formatterIntFormatter.Format(value7);
  2. public string Format(int value)

    9{10    public string Format(int value7)11    {12        return "value=" + value7;13    }
  3. formatted ← value=7

    21    IFormatter<int> formatter = new IntFormatter();22    string formatted→ value=7 = formatterIntFormatter.Format(value7);2324    Console.WriteLine($"value={value7}");25    Console.WriteLine($"formatted={formattedvalue=7}");26}
    outputvalue=7
    formatted=value=7
  1. value ← 3, formatter ← IntFormatter

    17{18    static void Main()19    {20        int value→ 3 = 3;21        IFormatter<int> formatter→ IntFormatter = new IntFormatter();22        string formatted = formatterIntFormatter.Format(value3);
  2. public string Format(int value)

    9{10    public string Format(int value3)11    {12        return "value=" + value3;13    }
  3. formatted ← value=3

    21    IFormatter<int> formatter = new IntFormatter();22    string formatted→ value=3 = formatterIntFormatter.Format(value3);2324    Console.WriteLine($"value={value3}");25    Console.WriteLine($"formatted={formattedvalue=3}");26}
    outputvalue=3
    formatted=value=3
  1. value ← 11, formatter ← IntFormatter

    17{18    static void Main()19    {20        int value→ 11 = 11;21        IFormatter<int> formatter→ IntFormatter = new IntFormatter();22        string formatted = formatterIntFormatter.Format(value11);
  2. public string Format(int value)

    9{10    public string Format(int value11)11    {12        return "value=" + value11;13    }
  3. formatted ← value=11

    21    IFormatter<int> formatter = new IntFormatter();22    string formatted→ value=11 = formatterIntFormatter.Format(value11);2324    Console.WriteLine($"value={value11}");25    Console.WriteLine($"formatted={formattedvalue=11}");26}
    outputvalue=11
    formatted=value=11