A generic class stores or uses a value while keeping its type.

generic class A generic class has a type parameter in its class name, such as `Box<T>`.

Generic Classes

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

class Box<T>
{
    public T Value { get; }

    public Box(T value)
    {
        Value = value;
    }
}

class Program
{
    static void Main()
    {
        int score = 12;
        Box<int> scoreBox = new Box<int>(score);
        Box<string> labelBox = new Box<string>("points");

        Console.WriteLine($"score={scoreBox.Value}");
        Console.WriteLine($"label={labelBox.Value}");
    }
}
using System;

class Box<T>
{
    public T Value { get; }

    public Box(T value)
    {
        Value = value;
    }
}

class Program
{
    static void Main()
    {
        int score = 5;
        Box<int> scoreBox = new Box<int>(score);
        Box<string> labelBox = new Box<string>("points");

        Console.WriteLine($"score={scoreBox.Value}");
        Console.WriteLine($"label={labelBox.Value}");
    }
}
using System;

class Box<T>
{
    public T Value { get; }

    public Box(T value)
    {
        Value = value;
    }
}

class Program
{
    static void Main()
    {
        int score = 20;
        Box<int> scoreBox = new Box<int>(score);
        Box<string> labelBox = new Box<string>("points");

        Console.WriteLine($"score={scoreBox.Value}");
        Console.WriteLine($"label={labelBox.Value}");
    }
}
  1. score ← 12

    14{15    static void Main()16    {17        int score→ 12 = 12; //@score=5, 2018        Box<int> scoreBox = new Box<int>(score);19        Box<string> labelBox = new Box<string>("points");
  2. public Box(T value)

    pass 1 of 2
    7public Box(T value12)8{9    Value = value12;10}
  3. scoreBox ← Box`1[System.Int32]

    17int score = 12; //@score=5, 2018Box<int> scoreBox→ Box`1[System.Int32] = new Box<int>(score);19Box<string> labelBox = new Box<string>("points");
  4. public Box(T value)

    pass 2 of 2
    7public Box(T valuepoints)8{9    Value = valuepoints;10}
  5. labelBox ← Box`1[System.String]

    18    Box<int> scoreBox = new Box<int>(score);19    Box<string> labelBox→ Box`1[System.String] = new Box<string>("points");2021    Console.WriteLine($"score={scoreBox.Value12}");22    Console.WriteLine($"label={labelBox.Valuepoints}");23}
    outputscore=12
    label=points
  1. score ← 5

    14{15    static void Main()16    {17        int score→ 5 = 5;18        Box<int> scoreBox = new Box<int>(score);19        Box<string> labelBox = new Box<string>("points");
  2. public Box(T value)

    pass 1 of 2
    7public Box(T value5)8{9    Value = value5;10}
  3. scoreBox ← Box`1[System.Int32]

    17int score = 5;18Box<int> scoreBox→ Box`1[System.Int32] = new Box<int>(score);19Box<string> labelBox = new Box<string>("points");
  4. public Box(T value)

    pass 2 of 2
    7public Box(T valuepoints)8{9    Value = valuepoints;10}
  5. labelBox ← Box`1[System.String]

    18    Box<int> scoreBox = new Box<int>(score);19    Box<string> labelBox→ Box`1[System.String] = new Box<string>("points");2021    Console.WriteLine($"score={scoreBox.Value5}");22    Console.WriteLine($"label={labelBox.Valuepoints}");23}
    outputscore=5
    label=points
  1. score ← 20

    14{15    static void Main()16    {17        int score→ 20 = 20;18        Box<int> scoreBox = new Box<int>(score);19        Box<string> labelBox = new Box<string>("points");
  2. public Box(T value)

    pass 1 of 2
    7public Box(T value20)8{9    Value = value20;10}
  3. scoreBox ← Box`1[System.Int32]

    17int score = 20;18Box<int> scoreBox→ Box`1[System.Int32] = new Box<int>(score);19Box<string> labelBox = new Box<string>("points");
  4. public Box(T value)

    pass 2 of 2
    7public Box(T valuepoints)8{9    Value = valuepoints;10}
  5. labelBox ← Box`1[System.String]

    18    Box<int> scoreBox = new Box<int>(score);19    Box<string> labelBox→ Box`1[System.String] = new Box<string>("points");2021    Console.WriteLine($"score={scoreBox.Value20}");22    Console.WriteLine($"label={labelBox.Valuepoints}");23}
    outputscore=20
    label=points