Resumo : neste tutorial, você aprenderá como usar genéricos C# para definir classes reutilizáveis e de tipo neutro.
Introdução às classes genéricas C#
O exemplo a seguir mostra a Stack
classe que permite colocar uma string em uma pilha ou retirar o elemento superior dela:
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;
}
Linguagem de código: C# ( cs )
A Stack
classe funciona bem com strings. Mas se você quiser ter uma pilha de outros tipos como inteiro , float ou objetos, será necessário criar uma classe para cada tipo.
Para tornar a Stack
classe mais genérica e reutilizável, você pode usar genéricos C# para definir uma classe genérica. O seguinte define uma classe genérica Stack
que funciona com qualquer tipo.
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);
}
Linguagem de código: C# ( cs )
Como funciona.
Primeiro, especifique o tipo ( T
) entre colchetes angulares <>
que segue o nome da classe:
class Stack<T>
Linguagem de código: C# ( cs )
Segundo, use o tipo ( T
) para o items
membro:
T[] items;
Linguagem de código: C# ( cs )
Terceiro, use o tipo ( T
) nos métodos construtor, pop e push.
A seguir mostramos como usar a Stack<T>
classe:
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);
}
}
}
Linguagem de código: C# ( cs )
Como funciona.
Primeiro, crie uma nova instância de Stack
e especifique the string
como o tipo:
var colors = new Stack<string>(3);
Linguagem de código: C# ( cs )
Segundo, chame o Push()
método três vezes para colocar as strings Red
, Green
e Blue
na pilha:
colors.Push("Red");
colors.Push("Green");
colors.Push("Blue");
Linguagem de código: C# ( cs )
Terceiro, retire a string da pilha até que esteja vazia chamando o Pop()
método:
while (true)
{
var color = colors.Pop();
if (color == null)
{
break;
}
Console.WriteLine(color);
}
Linguagem de código: C# ( cs )
Resumo
- Use a classe genérica C# para construir classes reutilizáveis e de tipo neutro.