Нет, это не жизненный пример. Это вообще очень странный пример, и никто в здравом уме не будет вызывать нестатический метод на имени типа. В данном случае расово верным и единственным рациональным решением было бы обратиться к этому методу, как
var ret = instance.Method("string");
.
Однако, возвращаясь, собственно, к теме самих делегатов и их
жизненного применения. Самым классическим примером была бы реализация функции Where (которая поставляется в LINQ).
// in static class
IEnumerable<TElement> Where(this IEnumerable<TElement> source, Predicate<TElement> filter){
// для простоты опустим проверки и т.д.
foreach(TElement elem in source)
if(filter(elem)) yield return elem;
}
// ... usage ...
var list = new List<int> { 1, 2, 3, 4, 5, 6 };
var ret = list.Where(elem => elem % 2 == 0);
foreach(int e in ret)
Console.Write(e + " ");
// ...
В данном случае функция перебирает каждый элемент в перечислении
source, вызывает функцию
filter (функция, которая принимает значение типа TElement и возвращает bool), и возвращает текущий элемент, если возвращённое
filter значение было
true.
После выполнения фрагмента кода, на экран было бы выведено "2 4 6 ".