当前位置: 首页 > 编程语言 > C#

C#学习教程:.NET4.0中新的“动态”变量类型是否解决了CLR中单-多方法分派的问题?分享

时间:2023-04-10 22:47:34 C#

.NET4.0中新的“动态”变量类型是否解决了CLR中单/多方法调度的问题?单个分派的问题对于使用静态类型语言(如Java和C#)进行编码的任何人来说都是很熟悉的。基本思想是:运行时多态性允许我们根据接收者的类型(运行时类型)调度正确的方法调用,例如:IAnimalmystery=newCat();神话.印章();该方法调用将基于mythwhen的运行类型mything,即Cat。这是一个单独的调度函数(存在于Java/C#中)。现在,如果您不仅需要分派接收器的运行时类型,还需要分派(多个)参数的类型,那么您会遇到一个小问题:publicclassMyAcceptor{publicvoidaccept(IVisitorvst){...}publicvoidaccept(EnhancedConcreteVisitorvst){...}}永远不会调用第二种方法,因为在我们的“消费者”代码中,我们倾向于通过通用超类型或接口(在我的示例中为Visitor)来处理不同类型的对象。这就是我问的原因——因为动态类型允许多分派多态性,而C#4.0有动态关键字;)是的,动态类型允许多分派——不,你不必创建自己的动态对象来执行此操作。假设我们想自己实现Enumerable.Count(),并且不想在我们的代码中加载“if(sourceisIList)”测试。我们可以这样写:publicstaticclassEnumerable{publicstaticintCount(thisIEnumerablesource){dynamicd=source;返回CountImpl(d);}privatestaticintCountImpl(ICollectioncollection){returncollection.Count;}privatestaticintCountImpl(ICollectioncollection){returncollection.Count;}privatestaticintCountImpl(stringtext){returntext.Length;}privatestaticintCountImpl(IEnumerablesource){//回退intcount=0;foreach(源代码中的T){count++;}返回计数;我并不是说这是个好主意,但这就是它的工作原理:)请注意,您需要注意不要引入可能最终导致对某些类型的模棱两可的调用的情况。这不是使用参数类的问题,但考虑到单个类可以实现多个接口。是的,您可以创建任意复杂计划的DLR类型。参见http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject.aspx以上是C#学习教程:Doesthenew"dynamic"variabletypein.NET4.0solvesthesingle/multipleinCLR方法调度问题?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: