Методы расширения могут быть назначены делегатам, которые соответствуют их использованию на объекте, например:
static class FunnyExtension {
public static string Double(this string str) { return str + str; }
public static int Double(this int num) { return num + num; }
}
Func<string> aaMaker = "a".Double;
Func<string, string> doubler = FunnyExtension.Double;
Console.WriteLine(aaMaker()); //Prints "aa"
Console.WriteLine(doubler("b")); //Prints "bb"
Если тип, который они расширяют, является типом значения, он не будет работать:
Func<int> eightMaker = 4.Double; //Error CS1113: Extension methods 'FunnyExtension.Double(int)' defined on value type 'int' cannot be used to create delegates
Func<int, int> intDoubler = FunnyExtension.Double; //Works
Это дает
Ошибка CS1113: методы расширения "FunnyExtension.Double(int)" по типу значения 'int' не может использоваться для создания делегатов.
Почему они не могут?