【发布时间】:2010-11-04 04:49:36
【问题描述】:
可以将扩展方法分配给与其在对象上的用法相匹配的委托,如下所示:
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)” on value type 'int' 不能用于创建委托。
他们为什么不能?
【问题讨论】:
-
确定不是CS1113?
标签: c# .net extension-methods delegates value-type