Предположим, у нас есть:
interface Foo
{
bool Func(int x);
}
class Bar: Foo
{
bool Func(int x)
{
return (x>0);
}
}
class Baz: Foo
{
bool Func(int x)
{
return (x<0);
}
}
Теперь мы можем перебрасывать Bar и Baz как Foos и вызывать их методы Func.
Делегаты немного упрощают это:
delegate bool Foo(int x);
bool Bar(int x)
{
return (x<0);
}
bool Baz(int x)
{
return (x>0);
}
Теперь мы можем использовать Bar и Baz в качестве делегатов Foo.
В чем реальная польза от делегатов, кроме сокращения кода?