Summary: in this tutorial, you’ll learn how to use C# generics to define reusable and type-neutral classes.
Introduction to the C# generic classes
The following shows the Stack
class that allows you to push a string onto a stack or pop the top element out of it:
namespace CSharpTutorial;
class Stack
{
int current = -1;
string[] items;
public Stack(int size)
{
items = new string[size];
}
public bool Empty => current == -1;
public bool Full => current == items.Length - 1;
public bool Push(string item)
{
if (!Full)
{
items[++current] = item;
return true;
}
return false;
}
public string? Pop() => !Empty ? items[current--] : null;
}
Code language: C# (cs)
The Stack
class works fine with strings. But if you want to have a stack of other types like integer, float, or objects, you need to create a class for each type.
To make the Stack
class more generic and reusable, you can use C# generics to define a generic class. The following defines a generic Stack
class that works with any type.
namespace CSharpTutorial;
class Stack<T>
{
int current = -1;
T[] items;
public Stack(int size)
{
items = new T[size];
}
public bool Empty => current == -1;
public bool Full => current == items.Length - 1;
public bool Push(T item)
{
if (!Full)
{
items[++current] = item;
return true;
}
return false;
}
public T? Pop() => !Empty ? items[current--] : default(T);
}
Code language: C# (cs)
How it works.
First, specify the type (T
) inside angle brackets <>
that follows the class name:
class Stack<T>
Code language: C# (cs)
Second, use the type (T
) for the items
member:
T[] items;
Code language: C# (cs)
Third, use the type (T
) in the constructor, pop, and push methods.
The following shows how to use the Stack<T>
class:
class Program
{
public static void Main(string[] args)
{
var colors = new Stack<string>(3);
colors.Push("Red");
colors.Push("Green");
colors.Push("Blue");
while (true)
{
var color = colors.Pop();
if (color == null)
{
break;
}
Console.WriteLine(color);
}
}
}
Code language: C# (cs)
How it works.
First, create a new instance of the Stack
and specify the string
as the type:
var colors = new Stack<string>(3);
Code language: C# (cs)
Second, call the Push()
method three times to push the Red
, Green
, and Blue
strings into the stack:
colors.Push("Red");
colors.Push("Green");
colors.Push("Blue");
Code language: C# (cs)
Third, pop the string out of the stack until it is empty by calling the Pop()
method:
while (true)
{
var color = colors.Pop();
if (color == null)
{
break;
}
Console.WriteLine(color);
}
Code language: C# (cs)
Summary
- Use C# generic class to build reusable and type-neutral classes.