Un delegato è solo una classe senza dati e un metodo. Questo è facile da implementare in quasi tutti i linguaggi OO, inclusi anche C # e certamente Java.
C # (utilizzando un delegato):
public delegate bool Test( int, int );
// And in some other class/method:
SortEm.sort( ilist, (a, b) => a < b );
// And in static class SortEm:
public static void sort( int[] list, Test test ) {
...
if (test( x, y )) {
...
}
Java:
public interface JDelegate {
public boolean test( int a, int b );
}
// And in some other class/method:
SortEm.sort( ilist,
// Anonymous Class
new JDelegate() {
@Override public boolean test( int a, int b ) { return a < b; }
}
);
// And in class SortEm:
public static void sort( int[] list, JDelegate sorter ) {
...
if (sorter.test( x, y )) {
...
}
Java ha bisogno di un po 'più di digitazione. Utilizza i concetti esistenti piuttosto che crearne di nuovi ( delegate , ad esempio), il che rende più facile tornare a Java dopo aver trascorso un anno su C. Inoltre, l'interfaccia "JDelegate" può diventare molto più elaborato se necessario, così come la classe effettivamente passata, che potrebbe essere una classe denominata (piuttosto che anonima) che implementa JDelegate.
Il grande margine C # in questo è che la sezione più comunemente usata in questo codice è la chiamata per ordinare - una linea contro quattro, in questo caso. Ma la funzionalità è presente in Java e probabilmente in qualsiasi linguaggio OO.
Fare questo in delegati C # senza è lasciato come esercizio per il lettore.