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

动态调度和绑定

如何解决《动态调度和绑定》经验,为你挑选了1个好方法。

动态调度和动态绑定是一回事吗?

谢谢

马切伊



1> JaredPar..:

没有.

Dynamic Dispatch - 实际方法组/签名/覆盖链在编译时绑定.调用的方法取决于对象的实际运行时类型,但不会发生实际解释.它仍然是静态绑定方法的一个版本.

这是C#中的一个例子.

class Foo { 
  public override string ToString() { return "foo's ToString"; }
}

void Example(object p1) { 
  p1.ToString();
}

对p1.ToString的调用是动态调度的一个例子.代码静态绑定到方法ToString.但是它是一个虚方法,因此调用的实际.ToString()在运行时才会知道,但保证调用.ToString()方法.它将是p1实际类型的ToString.因此,如果p1实际上是Foo的一个实例,则将调用Foo :: ToString.

动态绑定 - 实际方法在运行时绑定,并且基于语言或反射框架的语义进行解释.由于无法绑定,这可能会失败.

例:

void CallBar(object o) {
  var method = o.GetType().GetMethod("Bar");
  method.Invoke(new object[] {o});
}

在这种情况下,我们试图在相关对象上调用方法"Bar".关键字正在尝试.对象上完全不可能存在"Bar".但这是在运行时通过动态绑定到方法"Bar"来确定的.

它们最常见的是两种操作(可能)取决于对象的运行时类型.

编辑

根据OP的要求增加了一些示例

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