所以我已经阅读了许多与"什么是方法组"相关的StackOverflow问题以及其他互联网文章,它们在底线都说同样的事情 - 方法组是"一组重载方法".
然而,阅读乔恩斯基特的"C#详解(第二版)",他说关于Lambda表达式的语境方法组下面的空话(章9.4.1)
更改的原因:简化泛型方法调用
类型推断在少数情况下发生.我们已经看到它适用于隐式类型数组,当您尝试将方法组隐式转换为委托类型时也需要它.当您使用方法组作为另一个方法的参数时发生转换时,这可能会特别令人困惑:调用方法的重载,方法组中方法的重载以及泛型方法涉及的可能性,这组潜在的转换可能是巨大的."
这两个方法组都不只是分配一组重载方法,或者他说你实际上可以创建一个保留整个方法组的委托.或者完全不同的东西,我不太了解.
有人能解释一下他说的可能吗?
谢谢,
Eri*_*ert 14
Jon描述的场景是这样的:
int M() {...}
string M<T>(T t) {...}
double M<T>(List<T> t) {...}
static void M(double d) {...}
... etc ...
void N(Func<int> f) {...}
void N<T>(Action<T> a) {...}
void N<T>(Func<IEnumerable<T>> f) {...}
... etc ...
N(M);
Run Code Online (Sandbox Code Playgroud)
N和M都是方法组,可能包含许多方法,其中一些可能是通用的.编译器提出的问题是"确定哪些方法N和M是开发人员想要的方法,如果预期的方法是通用的,则计算出类型参数".
为了完成所有这一切,编译器必须尝试每个可能的N,然后找出每个可能的M中的哪个与N的重载的形式参数的委托类型兼容.它必须丢弃那些不起作用的,然后从所有那些潜在的数百或数千个组合中,找出哪一个是"最好的",如果有的话.这在语义分析中是一个棘手的问题.
归档时间: |
|
查看次数: |
3662 次 |
最近记录: |