Delegados (Guia de Programação em C#)Delegates (C# Programming Guide)

Um delegado é um tipo que representa referências aos métodos com lista de parâmetros e tipo de retorno específicos.A delegate is a type that represents references to methods with a particular parameter list and return type. Ao instanciar um delegado, você pode associar sua instância a qualquer método com assinatura e tipo de retorno compatíveis.When you instantiate a delegate, you can associate its instance with any method with a compatible signature and return type. Você pode invocar (ou chamar) o método através da instância de delegado.You can invoke (or call) the method through the delegate instance.

Delegados são usados para passar métodos como argumentos a outros métodos.Delegates are used to pass methods as arguments to other methods. Os manipuladores de eventos nada mais são do que métodos chamados por meio de delegados.Event handlers are nothing more than methods that are invoked through delegates. Ao criar um método personalizado, uma classe como um controle do Windows poderá chamá-lo quando um determinado evento ocorrer.You create a custom method, and a class such as a windows control can call your method when a certain event occurs. O seguinte exemplo mostra uma declaração de delegado:The following example shows a delegate declaration:

public delegate int PerformCalculation(int x, int y);

Qualquer método de qualquer classe ou struct acessível que corresponda ao tipo delegado pode ser atribuído ao delegado.Any method from any accessible class or struct that matches the delegate type can be assigned to the delegate. O método pode ser estático ou de instância.The method can be either static or an instance method. Isso possibilita alterar via programação chamadas de método e também conectar novo código a classes existentes.This makes it possible to programmatically change method calls, and also plug new code into existing classes.

Observação

No contexto da sobrecarga de método, a assinatura de um método não inclui o valor de retorno.In the context of method overloading, the signature of a method does not include the return value. No entanto, no contexto de delegados, a assinatura inclui o valor de retorno.But in the context of delegates, the signature does include the return value. Em outras palavras, um método deve ter o mesmo tipo de retorno que o delegado.In other words, a method must have the same return type as the delegate.

Essa capacidade de se referir a um método como um parâmetro torna delegados ideais para definir métodos de retorno de chamada.This ability to refer to a method as a parameter makes delegates ideal for defining callback methods. Por exemplo, uma referência a um método que compara dois objetos poderia ser passada como um argumento para um algoritmo de classificação.For example, a reference to a method that compares two objects could be passed as an argument to a sort algorithm. Como o código de comparação está em um procedimento separado, o algoritmo de classificação pode ser escrito de forma mais geral.Because the comparison code is in a separate procedure, the sort algorithm can be written in a more general way.

Visão geral de delegadosDelegates Overview

Os delegados possuem as seguintes propriedades:Delegates have the following properties:

  • Os delegados são como ponteiros de funções em C++, mas apresentam tipos seguros.Delegates are like C++ function pointers but are type safe.

  • Os delegados permitem que métodos sejam passados como parâmetros.Delegates allow methods to be passed as parameters.

  • Os delegados podem ser usados para definir métodos de retorno de chamada.Delegates can be used to define callback methods.

  • Os delegados podem ser encadeados juntos; por exemplo, vários métodos podem ser chamados um único evento.Delegates can be chained together; for example, multiple methods can be called on a single event.

  • Os métodos não precisam corresponder ao tipo delegado exatamente.Methods do not have to match the delegate type exactly. Para obter mais informações, consulte Usando a variação delegados.For more information, see Using Variance in Delegates.

  • O C# versão 2.0 introduziu o conceito de Métodos Anônimos que permitem que blocos de código sejam passados como parâmetros em vez de um método definido separadamente.C# version 2.0 introduced the concept of Anonymous Methods, which allow code blocks to be passed as parameters in place of a separately defined method. O C# 3.0 introduziu expressões lambda como uma maneira mais concisa de escrever blocos de código embutidos.C# 3.0 introduced lambda expressions as a more concise way of writing inline code blocks. Os métodos anônimos e as expressões lambda (em determinados contextos) são compilados para tipos delegados.Both anonymous methods and lambda expressions (in certain contexts) are compiled to delegate types. Juntos, esses recursos são agora conhecidos como funções anônimas.Together, these features are now known as anonymous functions. Para obter mais informações sobre expressões lambda, consulte Funções Anônimas.For more information about lambda expressions, see Anonymous Functions.

Nesta seçãoIn This Section

Especificação da Linguagem C#C# Language Specification

Para obter mais informações, consulte a Especificação da linguagem C#.For more information, see the C# Language Specification. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.The language specification is the definitive source for C# syntax and usage.

Expressões lambda, eventos e delegados em C# 3.0 Cookbook, Third Edition: More than 250 solutions for C# 3.0 programmersDelegates, Events, and Lambda Expressions in C# 3.0 Cookbook, Third Edition: More than 250 solutions for C# 3.0 programmers

Delegados e eventos em Learning C# 3.0: Master the fundamentals of C# 3.0Delegates and Events in Learning C# 3.0: Master the fundamentals of C# 3.0

Consulte tambémSee Also

Delegate
Guia de Programação em C#C# Programming Guide
EventosEvents