Of course people can live without delegates. Without OOP. Without electricity…
Bringing a pointless code sample found "on Internet" does not prove anything. Maybe, it's not so pointless, just the point could be different: to explain the syntax, basic usage, how things work in principle. Don't thing everyone needs to prove to you the usefulness of some activity. You just need to use some fantasy, first learn how things work and then decide how it can be used; this is much more productive.
The programming is all about abstractions. When one method calls another method, it uses the fact that the method is abstracted from the particular values of its parameters: the parameters are formal, and different actual parameters can be substituted, which provides some level of code reuse. Can the calling method be abstracted from the method it calls? Yes, it can, but then the methods should be able to be presented as parameters. To do this, we need to have some language construct and the concept that represents something which can be called as methods, but is a
first-class citizen. That brings us to the idea of delegates. Fur further detail, read this:
http://en.wikipedia.org/wiki/Abstraction_%28computer_science%29[
^],
http://en.wikipedia.org/wiki/First-class_function[
^]
http://en.wikipedia.org/wiki/Delegation_%28programming%29[
^].
There are situations where delegates provide dramatic improvement in performance, but such cases are very advanced and hard to explain. One of them is using such thing as
System.Reflection.Emit.DynamicMethod
:
http://msdn.microsoft.com/en-us/library/system.reflection.emit.dynamicmethod.aspx[
^].
Explanation of the scenarios goes far beyond the topic of this question; and you are certainly not yet ready to understand such thing. Main focus of delegates is expressive capabilities, abstraction and code reuse, not performance. I notices that the thinking of the beginners often tries to reduce many non-trivial aspects of programming to performance. With some experience, this problem should go.
—SA