当前位置:  开发笔记 > 编程语言 > 正文

C#是单一派遣还是多种派遣语言?

如何解决《C#是单一派遣还是多种派遣语言?》经验,为你挑选了3个好方法。

我正在努力理解单个和多个调度是什么.

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

从这个定义来看,我认为C#和VB.Net是多分派的,即使在编译时选择要调用的重载也是如此.

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



1> Daniel Magli..:

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

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

这有一个真正区别的情况是当你有一个方法的2个重载,它们的参数类型不同,但是这两个类型是多态的,你用一个声明为更高类型的引用来调用,它有一个对象较低的类型...(如果有人能想出更好的表达方式,请随时编辑此答案)

例:

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

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

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

很抱歉doc rehash ...在我看来,这是解释这种差异的最清晰的方法,而不仅仅是阅读每个调度方法的定义.

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



2> 小智..:

对于那些使用搜索引擎发现本文的人,C#4.0引入了动态关键字.代码如下所示.

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

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


+1.C#4.0支持多个调度.以下版本没有

3> JoshBerke..:

C#是单一发送,但有一些博客文章,他们的标题看起来像他们试图模仿多方法.如果我可以加载其中一篇文章,我会在这里更新我的答案.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有