Делегаты - это реализация
функтора на платформе .net. Функтор - это распространенная в современных языках базовая концепция, пришедшая из функционального программирования. Коротко её смысл в том, чтобы работать с функцией как со значением, наравне со значениями других, более привычных типов, вроде int или double. Т.е. функцию можно передавать в другие функции, возвращать из функций и так далее. В функциональных языках это обычное дело, однако и в императивных языках это даёт массу возможностей.
Количество применений делегатов в дотнете вообще и конкретно в C# огромно. Собственно, сам язык сегодня является частично функциональным из-за того, что широко используются делегаты и основанные на них возможности. Любая лямбда может быть скомпилирована в делегат. LINQ to Objects основаны на делегатах. События есть инкапсулированные делегаты. Любые callback-и в дотнете это делегаты. Список можно продолжать
Сравнивая C# с другими языками, делегаты часто называют "умными указателями на функции" в том смысле, что они похожи на указатели на функции в Си, но умеют еще и запоминать объект, для которого требуется вызвать метод, если метод нестатический. А вот в C++ есть прямой их аналог - это std::function.
В общем, почитайте еще про них. Я даже не понимаю, к чему вы привели свой пример, и что он, по вашему мнению, должен продемонстрировать. Логично, что вы не смогли создать делегат, т.к. инстанс-метод невозможно вызвать без привязки к конкретному объекту.