class OverloadingByDelegateReturnType
{
static void Execute(Func<int> action)
{
Console.WriteLine("action returns an int: " + action());
}
static void Execute(Func<double> action)
{
Console.WriteLine("action returns a double: " + action());
}
static void Main()//委托返回类型影响了重载选择
{
Execute(() => 1);//执行Execute(Func<int> action)方法
}
}
包含两个名为Execute的方法,另外还有一个使用了Lambda表达式的调用
对Execute的调用可以换用一个匿名方法来写,也可以换用一个方法组--不管
以什么方式,凡是涉及转换,所应用的规则都是一样的。
重载规则指出,在执行了对实参的转换之后,如果发现两个方法都合适,
就对那些实参转换进行检查,看哪个转换"更好"。 这里的转换并不是从一个普通
的.NET类型到参数类型,而是从一个Lambda表达式到两个不同的委托类型。
从一个无参数、推断返回类型为int的Lambda表达式转换成Func<int>或Func
<double>。两个委托类型的参数列表是相同的(空)。我们需要判断哪个转换
"更好”就可以了:int到int,还是int到double, int到int的转换更好。
输出
action returns an int: 1