Resumo : neste tutorial, você aprenderá sobre genéricos do C# e como definir um método genérico que funcione com qualquer tipo.
Introdução aos genéricos C#
Os genéricos C# permitem escrever código que funciona com mais de um tipo. Usando genéricos, você pode escrever código com espaços reservados para tipos e, em seguida, fornecer os tipos reais ao usar o código.
Suponha que você precise escrever um método que troque os valores de duas variáveis inteiras . Para fazer isso, você pode definir um método chamado SwapInt()
que aceite dois parâmetros inteiros como este:
static void SwapInt(ref int a, ref int b)
{
int temp = a;
a = b;
b = temp;
}
Linguagem de código: C# ( cs )
Posteriormente, você deseja trocar os valores de duas variáveis de string . Neste caso, você precisa definir um novo método que troque as strings:
static void SwapString(ref string a, ref string b)
{
string temp = a;
a = b;
b = temp;
}
Linguagem de código: C# ( cs )
Ambos os métodos SwapInt()
e SwapString()
têm a mesma lógica, exceto pelos tipos de variáveis com as quais lidam.
Imagine que você precisa trocar valores de duas variáveis de um novo tipo, por exemplo, float , você precisa definir um novo método para cada novo tipo. Como resultado, você terá muitos Swap*
métodos com a mesma lógica.
Para resolver isso, você pode criar um método genérico que troque valores de variáveis de qualquer tipo como este:
static void Swap<T>(ref T a, ref T b)
{
T temp = a;
a = b;
b = temp;
}
Linguagem de código: C# ( cs )
Neste Swap()
método, em vez de usar um tipo específico, usamos o espaço reservado T para o tipo.
Observe que o nome do espaço reservado T
é uma convenção da comunidade. Isso significa que você pode usar qualquer string como A, B, TYPE, etc.
Ao usar o Swap()
método, você pode especificar o tipo específico. Por exemplo:
int x = 10, y = 20;
Swap<int>(ref x, ref y);
Linguagem de código: C# ( cs )
Neste exemplo, especificamos o int
tipo entre colchetes angulares ( <>
) que segue o nome do método. Como os tipos de x
e y
são int
, você pode tornar a chamada do método curta assim:
int x = 10, y = 20;
Swap(ref x, ref y);
Linguagem de código: C# ( cs )
O programa a seguir ilustra como usar o Swap()
método genérico e o utiliza para trocar valores de dois números inteiros e duas variáveis de string:
class Program
{
static void Swap<T>(ref T a, ref T b)
{
T temp = a;
a = b;
b = temp;
}
public static void Main(string[] args)
{
// swap integers
int x = 10, y = 20;
Console.WriteLine($"Before swapping: x={x},y={y}");
Swap(ref x, ref y);
Console.WriteLine($"After swapping: x={x},y={y}");
// swap strings
string s1 = "hello", s2 = "goodbye";
Console.WriteLine($"Before swapping: s1={s1},s2={s2}");
Swap(ref s1, ref s2);
Console.WriteLine($"After swapping: s1={s1},s2={s2}");
}
}
Linguagem de código: C# ( cs )
Saída:
Before swapping: x=10,y=20
After swapping: x=20,y=10
Before swapping: s1=hello,s2=goodbye
After swapping: s1=goodbye,s2=hello
Linguagem de código: texto simples ( texto simples )
C# permite que você use genéricos com o seguinte:
- Aulas
- Métodos
- Interfaces
- Delegados
- Estruturas
Na prática, você descobrirá que os genéricos são amplamente usados em tipos de coleção como List<T>
, Stack<T>
, Queue<T>
, etc. Eles são chamados de tipos de coleção genéricos .
Resumo
- Os genéricos do C# permitem que você escreva código de uso geral que usa o mesmo tipo em vários locais sem conhecer esse tipo antecipadamente.
- Use genéricos C# para escrever código reutilizável e de tipo neutro.