Supponiamo di avere un dominio in cui possiamo generalizzare alcune operazioni passando una funzione, come le funzioni Select
\ map
. Supponiamo ora che la funzione che passiamo abbia un nome specifico per il dominio e tipi di parametri fissi. Chiamiamolo a BazFunction
Possiamo avvicinarci alla definizione di BazFunction
in due modi:
- Come delegato:
Bar delegate BazFunction(int x)
- Come lambda:
Func<int, Bar>
Il loro utilizzo quando si chiama l'operazione è identico ( Foo((x) => x)
) ma la definizione della funzione è diversa
public Bar Foo(Func<int, Bar> baz)
public Bar Foo(BazFunction baz)
L'evidente vantaggio dell'utilizzo di un delegato è la leggibilità, almeno per qualcuno che abbia familiarità con il dominio.
Quali sono gli aspetti negativi di un simile approccio? Sia tecnico che non tecnico.