O primeiro se chama Higher-Order Function e é um conceito de programação funcional
Que é o que quem conhece FP odeia no Java: HOFs são horríveis de se fazer no Java
O C# usa MUITO as Higher Order Functions no LINQ, a biblioteca de tratamento de sequências dele
Do tipo, pra filtrar e ordenar uma lista, ao invés de fazer um monte de foreachs e ifs pra remover os itens indesejados e aplicar a ordem, você usa essas funções:
minhaListaDePessoas
.Where(pessoa => pessoa.Idade >= 18) // Filtra por pessoas maiores de idade
.OrderBy(pessoa => pessoa.Nome) // Ordena por ordem alfabética pelo nome
Um detalhe pouco percebido no LINQ é que ele não gera Lists, ele gera IEnumerables, que são sequências preguiçosas...
@Piovezan É como disse, meu caro: EM ESSÊNCIA não é uma coisa ruim. Mas entendo seu ponto, não fiquemos discutindo isso aqui. Tô prestando atenção na aula aí tb pq não conheço tanto de C#
Mas eu coloquei uns named parameters pra coisas que eu nem sempre faria. Por exemplo, nem sempre eu queria que a DropDown fosse ordenada, e nem sempre eu queria adicionar, eu queria limpá-la e colocar só a sequência que estou passando...
AtualizarDDL(sequencia, limpar: true); // Limpa a DDL antes de adicionar a sequência
AtualizarDDL(sequencia, ordenarPor: pessoa => pessoa.Idade); // Adiciona e depois ordena
Muito interessante o C#. Se não me engano, a programação multithread tem umas diferenças interessantes em relação ao Java, mas meu colega explicou muito por cima.