gpt4 book ai didi

c# - C# 是单分派(dispatch)语言还是多分派(dispatch)语言?

转载 作者:IT王子 更新时间:2023-10-29 04:10:38 27 4
gpt4 key购买 nike

我正在尝试准确地理解什么是单次分派(dispatch)和多次分派(dispatch)。

我刚刚读到这个:
http://en.wikipedia.org/wiki/Multiple_dispatch

根据该定义,在我看来 C# 和 VB.Net 是多重调度的,即使选择调用哪个重载是在编译时进行的。

我在这里是正确的,还是我遗漏了什么?谢谢!

最佳答案

好的,我理解了函数重载与多重调度的细微差别。

基本上,区别在于调用哪个方法是在运行时还是编译时选择的。现在,我知道每个人都这么说,但没有一个明确的例子,这听起来很明显,因为 C# 是静态类型的,而多调度语言(至少对我来说显然)似乎是动态类型的。到现在为止,只要是那个定义,多重分派(dispatch)和函数重载对我来说听起来完全一样。

真正重要的是当你

  • 有两个方法重载,在参数类型上有所不同(CaptureSpaceShip(IRebelAllianceShip ship)CaptureSpaceShip(Xwing ship)
  • 这两种类型(IRebelAllianceShipCaptureSpaceShip)是多态的,并且
  • 您使用声明为较高类型的引用调用该方法,该引用实际上指向较低类型的对象

完整示例:

int CaptureSpaceShip(IRebelAllianceShip ship) {}
int CaptureSpaceShip(XWing ship) {}

void Main() {
IRebelAllianceShip theShip = new XWing();
CaptureSpaceShip(theShip);
}

XWing 显然实现了 IRebelAllianceShip。在这种情况下,将调用第一个方法,而如果 C# 实现了多重调度,将调用第二个方法。

对于文档重新哈希感到抱歉...在我看来,这是解释这种差异的最清晰的方式,而不是仅仅阅读每个调度方法的定义。

更正式的解释: http://en.wikipedia.org/wiki/Double_dispatch#Double_dispatch_is_more_than_function_overloading

关于c# - C# 是单分派(dispatch)语言还是多分派(dispatch)语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/479923/

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