Это преобразование группы методов . Он преобразует группу методов (в основном, имя метода или перегруженных методов) в экземпляр типа делегата с совместимой подписью.
Да, любой совместимый метод может быть использован. Обратите внимание, что вы также можете указать цель - например:
string text = "Hello there";
Func<int, int, string> func = text.Substring;
Console.WriteLine(func(2, 3)); // Prints "llo", which is text.Substring(2, 3)
Там должен быть конкретным типом делегата, включающим, хотя. Вы не можете просто использовать:
Delegate x = methodName;
... компилятор не знает тип создаваемого делегата.
Для получения дополнительной информации см. Раздел 6.6 спецификации языка C # 4.
Обратите внимание, что преобразование группы методов всегда создает новый экземпляр соответствующего делегата - он не кэшируется (и не может быть без нарушения спецификации.)