早绑定,晚绑定,早晚都要绑定
绑定指在对象和其类型间建立关联的过程
早绑定指在对象申明的时候就和他的类型建立了关联
晚绑定是指我们的代码在运行时再检查对象是否提供了我们所需要的方法和属性
很多人说C#和Java是早绑定的,javascript,python是迟绑定的,其实这个说法并不全对
一方面,C#和Java是强类型的,在变量声明的时候就说明了类型,从这里来讲当然是早绑定的,于是我们才能在IDE中享受代码提示带来的方便,因为ide通过你的申明就能知道你的对象是什么类型,具有什么方法和属性,然后提示给你,同时编译的时候也可以帮你检查许多类型转换的错误.
另一方面:无论C#和Java在实现他们很重要的一个功能:多态的时候,都是用晚绑定,比如你的父类中定义了virtual的方法,那么这个方法可能会在你的子类中重载,具体你用什么子类,是变量申明时所不知道的,在C++编译器会在编译的时候为这些类加上一个指针,指针指向一个虚表,虚表中存在着真实的函数,这个是就是一个晚绑定了
早绑定的优点是:
- 编译效率
- 代码提示(代码智能感知)
- 编译时类型检查
晚绑定的优点是:
- 不用申明类型
- 对象类型可以随时更改
一些资料