C#是单调度语言还是多调度语言?我正在努力理解什么是单一和多重派遣。我刚刚读到这个:http://en.wikipedia.org/wiki/Multiple_dispatch从这个定义来看,我认为C#和VB.Net是多重调度的,即使它选择在编译时调用哪个重载。我在这里是正确的,还是我遗漏了什么?谢谢!好的,我理解函数重载与多分派不同的细微差别。基本上,不同之处在于选择在运行时或编译时调用哪个方法。现在,我知道每个人都这么说,但没有一个明确的例子,这听起来很明显,因为C#是静态类型的,而多调度语言(对我来说很明显)似乎是动态类型的。到目前为止只有这个定义,多分派和函数重载对我来说听起来完全一样。一个真正不同的情况是当你有一个方法的2个重载在参数类型上不同,但是这两种类型是多态的并且你调用一个声明为更高类型的引用,它有一个对象较低类型...(如果有人能想出更好的表达方式,请随时编辑此答案)示例:intCaptureSpaceShip(IRebelAllianceShipship){}intCaptureSpaceShip(XWingship){}voidMain(){IRebelAllianceShiptheShip=newXWing();捕获太空船(飞船);XWing显然实现了IRebelAllianceShip。在这种情况下,将调用第一个方法,而如果C#实现多分派,将调用第二个方法。抱歉文档重新哈希...在我看来,这是解释差异的最清晰方法,而不是仅仅阅读每个调度方法的定义。更正式的解释:http://en.wikipedia.org/wiki/Double_dispatch#Double_dispatch_is_more_than_function_overloading对于那些使用搜索引擎找到这篇文章的人,C#4.0引入了动态关键字。代码如下所示。intCaptureSpaceShip(IRebelAllianceShipship){}intCaptureSpaceShip(XWingship){}voidMain(){IRebelAllianceShiptheShip=newXWing();CaptureSpaceShip((动态)theShip);C#是单船,但有一些博客文章,他们的标题看起来像是在尝试模拟多方法。如果我可以加载其中一篇文章,我会在这里更新我的答案。C#不支持多重分派。Visitor设计模式模拟了可以被描述为多次分派的东西,尽管Visitor模式主要侧重于将算法与层次结构分开。根据引用的维基百科文章,多个分派根据所涉及对象的运行时类型定义,因此C#和VB.net不使用它,因为正如您所说,决定是在编译时做出的。GoF访问者模式是如何进行双重分派的示例。ScottMeyers的“MoreEffectiveC++”向您展示了如何在C++中做到这一点。这是Dobbs博士的链接,讨论了如何在Java和C++中进行双重分派。我知道这是一个老问题。在.Net4.0中,您可以将dynamic关键字用于多种方法...查看以下示例.Net4.0优化代码以重构现有的“if”条件和“is”运算符也许有人会对使用动态关键字(MSDN博客)进行多次分派的良好C#示例感兴趣维基百科称C#4.0(动态)是一种“多分派”语言。我也觉得像Java、C#(4.0之前)、C++这些语言都是singledispatch。以上是C#学习教程:IsC#asingle-dispatchormultiple-dispatchlanguage?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
