Delegações
delegate void DelegateType(int a);
Delegações representam métodos, permitindo pedaços de código serem passados como objetos. O exemplo acima define um novo tipo chamado DelegateType no qual representa métodos recebendo um int e não retornando valor. Qualquer método que se encaixe nessa assinatura pode ser atribuído à uma váriavel do tipo ou passada como um argumento do método desse tipo.
delegate void DelegateType(int a);
void f1(int a) {
stdout.printf("%d\n", a);
}
void f2(DelegateType d, int a) {
d(a); // Chamando uma delegaçao
}
void main() {
f2(f1, 5); // Passando um método como argumento de delegação à outro método
}
Esse código executará o método f2, passando por referencia o método f1 e o número 5. f2 então executará o método f1, passando o número.
Delegações podem ser criadas localmente também. O método membro também pode ser designado à uma delegação, ex.
class Foo {
public void f1(int a) {
stdout.printf("a = %d\n", a);
}
delegate void DelegateType(int a);
public static int main(string[] args) {
Foo foo = new Foo();
DelegateType d1 = foo.f1;
d1(10);
return 0;
}
}