gpt4 book ai didi

c# - 方法组(深入 C#)- 需要帮助更好地理解什么是方法组

转载 作者:可可西里 更新时间:2023-11-01 08:58:37 27 4
gpt4 key购买 nike

所以我阅读了一些与“什么是方法组”相关的 StackOverflow 问题以及其他互联网文章,它们在底线都说了同样的话——方法组是“一组重载方法” ".

但是,在阅读 Jon Skeet 的“C# 深入(第二版)”时,他陈述了以下关于 Lambda 表达式上下文中的方法组的措辞(第 9.4.1 章)

Reasons for change: streamlining generic method calls

Type inference occurs in a few situations. We’ve already seen it apply to implicitly typed arrays, and it’s also required when you try to implicitly convert a method group to a delegate type. This can be particularly confusing when the conversion occurs when you’re using a method group as an argument to another method: with overloading of the method being called, and overloading of methods within the method group, and the possibility of generic methods getting involved, the set of potential conversions may be enormous."

方法组分配的不仅仅是一组重载方法,或者他说您实际上可以创建一个保留整个方法组的委托(delegate)。或者我不太了解的完全不同的东西。

有人可以解释一下他在这里所说的是可能的吗?

谢谢,

最佳答案

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);

N 和 M 都是方法组,可能包含许多方法,其中一些可能是通用的。向编译器提出的问题是“确定哪些方法 N 和 M 是开发人员想要的方法,如果预期的方法是通用的,则确定类型参数”。

为了解决所有这些问题,编译器必须尝试所有可能的 N,然后找出每个可能的 M 中的哪一个与 N 重载的形式参数的委托(delegate)类型兼容。它必须丢弃那些不兼容的' 工作,然后从所有可能剩下的成百上千个组合中,找出哪个是“最好的”,如果有的话。这是语义分析中的一个有点棘手的问题。

关于c# - 方法组(深入 C#)- 需要帮助更好地理解什么是方法组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4760364/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com