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

静态绑定和动态绑定有什么区别?

如何解决《静态绑定和动态绑定有什么区别?》经验,为你挑选了2个好方法。

绑定时间可以分为两种类型:静态和动态.静态绑定和动态绑定有什么区别?

你能举个简单的例子来进一步说明吗?



1> John Feminel..:

在最一般的术语中,静态绑定意味着在编译时解析引用.

Animal a = new Animal();
a.Roar(); // The compiler can resolve this method call statically.

动态绑定意味着在运行时解析引用.

public void MakeSomeNoise(object a) {
   // Things happen...
   ((Animal) a).Roar(); // You won't know if this works until runtime!
}


您的后一个示例仍然是静态绑定.类型转换可能会或可能不会成功,但如果类型转换成功,即使`Roar`是虚拟方法,该代码将被绑定到()`静态地`Animal.Roar相关联的虚表插槽.使用任一当新的`dynamic`类型,或者通过使用反射动态结合仅发生在C#(例如`a.GetType().GetMethod( "吼").调用(一个,NULL)`).后者适用于实现名为`Roar`的无参数方法的任何类型,并返回最派生的实现(即使基本实现是非虚拟的).

2> David Poklud..:

它取决于何时发生绑定:在编译时(静态)或在运行时(动态).调用简单类方法时使用静态绑定.当您开始处理类层次结构和虚方法时,编译器将开始使用所谓的VTABLE.那时编译器并不确切地知道要调用什么方法,它必须等到运行时才能确定要调用的正确方法(这是通过VTABLE完成的).这称为动态绑定.

有关更多详细信息和参考,请参阅有关虚拟表的 Wikipedia文章.

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