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.