Generics
Generic Classes
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
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}");
}
}
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");public Box(T value)
pass 1 of 27public Box(T value12)8{9 Value = value12;10}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");public Box(T value)
pass 2 of 27public Box(T valuepoints)8{9 Value = valuepoints;10}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
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");public Box(T value)
pass 1 of 27public Box(T value5)8{9 Value = value5;10}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");public Box(T value)
pass 2 of 27public Box(T valuepoints)8{9 Value = valuepoints;10}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
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");public Box(T value)
pass 1 of 27public Box(T value20)8{9 Value = value20;10}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");public Box(T value)
pass 2 of 27public Box(T valuepoints)8{9 Value = valuepoints;10}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