Junior
O que são delegados em C# e para que são utilizados?
sobes.tech IA
Resposta da IA
Os delegados em C# são ponteiros seguros de tipo para métodos. Eles encapsulam um método, permitindo passá-lo como parâmetro ou usá-lo como tipo de variável.
São utilizados para:
- Implementação do padrão observador (Observer): Os eventos em C# baseiam-se em delegados. O emissor notifica os assinantes chamando o delegado.
- CallBacks (Retornos de chamada): Passar um método como argumento para uma função que o chamará mais tarde.
- Programação genérica: Os delegados
ActioneFuncpermitem criar métodos genéricos que funcionam com diferentes assinaturas de tipos. - Programação paralela e assíncrona: Métodos para execução em outros threads ou de forma assíncrona são frequentemente passados por delegados.
- LİNQ: Os operadores LINQ usam ativamente delegados para definir condições de filtragem, transformação, etc.
Exemplo de declaração e uso de um delegado:
// Declaração de um delegado com assinatura void e um argumento do tipo int
public delegate void MyDelegate(int x);
public class MyClass
{
public void PrintNumber(int num)
{
Console.WriteLine($"Número: {num}");
}
public static void Main(string[] args)
{
// Criação de uma instância do delegado apontando para o método PrintNumber
MyDelegate del = new MyDelegate(new MyClass().PrintNumber);
// Chamada do método através do delegado
del(10);
}
}
Exemplo com Action (para métodos void sem valor de retorno):
using System;
public class OtherClass
{
public void ExecuteAction(Action action)
{
action(); // Executa o delegado passado
}
public static void Main(string[] args)
{
Action myAction = () => Console.WriteLine("Olá do Action!");
new OtherClass().ExecuteAction(myAction);
}
}
Exemplo com Func (para métodos com valor de retorno):
using System;
public class ThirdClass
{
public int Calculate(Func<int, int, int> operation, int a, int b)
{
return operation(a, b); // Executa a operação passada e retorna o resultado
}
public static void Main(string[] args)
{
Func<int, int, int> add = (x, y) => x + y;
int result = new ThirdClass().Calculate(add, 5, 3);
Console.WriteLine($"Resultado da soma: {result}");
}
}