freeCodeCamp/guide/portuguese/csharp/delegates/index.md

55 lines
2.5 KiB
Markdown
Raw Normal View History

---
title: Delegates
localeTitle: Delegados
---
## Delegados
O delegado AC # representa uma referência a um método que possui um determinado conjunto de parâmetros e um determinado tipo de retorno. Ao instanciar o delegado, você pode associá-lo a qualquer método que seja compatível com o tipo delegado: tem a mesma quantidade de parâmetros, cada um é do mesmo tipo e o tipo do valor de retorno também é o mesmo.
Você pode usar um método de instância ou um método estático ao atribuí-lo a um delegado.
Delegado permite que você passe métodos como parâmetros para outros métodos.
Delegados são freqüentemente usados para implementar funções de retorno de chamada. O exemplo mais típico são os manipuladores de eventos: você se registra um método que deve ser chamado sempre que um determinado evento acontece (o botão do mouse é clicado, por exemplo).
### Breve explicação para desenvolvedores
Delegados são como ponteiros de função em linguagens do tipo C, como C ou C ++. No entanto, eles são do tipo seguro. Ao contrário de ponteiros de função simples eles contém informações sobre a instância do objeto cujo método será chamado ao chamar o delegado e ter verificações de tipo estrito para os argumentos e valor de retorno da função.
## Exemplo
Você declara um delegado semelhante a como você declara uma função, mas adiciona a palavra-chave `delegate` . Por exemplo:
```csharp
public delegate string StringOperation ( string s1, string s2 );
```
Qualquer método que aceita dois argumentos de `string` e retorna `string` pode ser atribuído a uma variável desse tipo de delegado.
Depois de ter criado o tipo de delegado, você pode usá-lo como qualquer outro tipo. Você pode declarar uma variável local, outros membros da classe ou passá-los como parâmetros para outros métodos.
```csharp
StringOperation a;
```
Antes de invocar o delegado, você precisará atribuir um valor a ele. Vamos supor que temos um método de concatenação que tem a seguinte implementação:
```csharp
private string Concatenate ( string one, string two ) {
return one + " " + two;
}
```
Você pode então atribuir isto à variável delegada e invocá-la como uma função.
```csharp
StringOperation op = Concatenate;
string result = op("Hello", "World");
Console.WriteLine ( result ); // print "Hello World" to the console
```
## Mais Informações
Leia mais sobre os delegados [aqui](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/delegates/) .