是否与重载相同,如果不同,请提供 C# 中的每个示例和示例

我已经阅读了对 SO 中提出的类似问题的回答......我不明白发布到它的回答。

类似的问题问 here

编辑:在 C# 4.0 中使用新的“dynamic”关键字......这会使语言“多分派(dispatch)”启用吗?

最佳答案

C# 使用单分派(dispatch),其中包括重载方法。当你有代码

stringBuilder.Append(parameter);

调度程序查看 stringBuilder 类上定义的所有方法,并找到正确的方法。

对于多分派(dispatch)示例,让我们看看 Prolog(这是我能想到的第一个)。您可以在 prolog 中定义一个函数,如下所示:
func(Arg1, Arg2) :- ....body....

这不是在任何类中定义的,而是在全局范围内定义的。然后,您可以在任意两个参数上调用 func(Arg1, Arg2) 并且该函数将被调用。如果你想要重载之类的东西,你必须验证函数内部的参数类型,并多次定义它:
func(Arg1, Arg2) :- is_number(Arg1), is_string(Arg2), ....body....
func(Arg1, Arg2) :- is_string(Arg1), is_list(Arg2), ....body....
func(Arg1, Arg2) :- is_number(Arg1), is_list(Arg2), ....body....

然后,您将发送的任何两种参数类型都将被检查 - 即多分派(dispatch)部分。

简而言之,single dispatch 只查看定义在第一个参数上的方法(在我们的第一个示例中,stringBuilder),然后解析正确的重载以使用其他参数调用。多重分派(dispatch)在全局范围内定义了方法/函数,并在重载解析期间将所有参数视为相同。

我希望我说清楚了,这是一个非常艰难的话题。

更新:我忘了提到,多分派(dispatch)发生在运行时,而单分派(dispatch)发生在编译时。
更新 #2:显然,这不是真的。

关于c# - 什么是单次和多次分派(dispatch)(与 .NET 相关)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/480443/

10-12 23:12