Quanto ao delegate, o mesmo representa uma referência para um método com uma assinatura específica (retorno + eventuais parâmetros).
Em que situação vc poderia usar isto? Na implementação de eventos em componentes (o OnClick de um botão é um delegate) ou mesmo para executar um método ou outro, de acordo com uma condição pré-especificada.