当前位置:  开发笔记 > 后端 > 正文

早期和晚期绑定有什么区别?

如何解决《早期和晚期绑定有什么区别?》经验,为你挑选了4个好方法。

早期和晚期绑定有什么区别?



1> Christian Ha..:

简短的回答是早期(或静态)绑定是指编译时绑定,而后期(或动态)绑定是指运行时绑定(例如,当您使用反射时).


但维基百科关于后期绑定的文章(http://en.wikipedia.org/wiki/Late_binding)表示"后期绑定经常与动态调度混淆,但存在显着差异".他们是一样的还是不一样?如果它们相同,则需要更改该维基百科页面.

2> James A. Ros..:

在编译语言中,差异很明显.

Java的:

//early binding:
public create_a_foo(*args) {
 return new Foo(args)
}
my_foo = create_a_foo();

//late binding:
public create_something(Class klass, *args) {
  klass.new_instance(args)
}
my_foo = create_something(Foo);

在第一个例子中,编译器可以在编译时执行各种简洁的操作.在第二种情况下,您只需要希望使用该方法的人负责任地这样做.(当然,较新的JVM支持该Class klass结构,这可以大大降低这种风险.)

另一个好处是IDE可以热链接到类定义,因为它已在方法中声明.到create_something(美孚)的调用可能是非常从方法的定义远远的,如果你正在寻找的方法定义,它可能会很高兴地看到实施.

后期绑定的主要优点是,它使事情变得像反转的控制更容易,以及多态性与鸭打字(如果你的语言支持这样的事情)的某些其他用途.



3> Ed S...:

直接来自http://word.mvps.org/fAQs/InterDev/EarlyvsLateBinding.htm

有两种方法可以使用自动化(或OLE自动化)以编程方式控制另一个应用程序.

后期绑定使用CreateObject来创建应用程序对象的实例,然后您可以控制它.例如,要使用后期绑定创建Excel的新实例:

 Dim oXL As Object
 Set oXL = CreateObject("Excel.Application")

另一方面,要操作现有的Excel实例(如果Excel已经打开),您将使用GetObject(无论您是使用早期绑定还是后期绑定):

 Dim oXL As Object
 Set oXL = GetObject(, "Excel.Application")

要使用早期绑定,首先需要在项目中将引用设置为要操作的应用程序.在任何Office应用程序的VB编辑器中,或在VB本身中,您可以通过选择工具+引用,然后从列表中选择所需的应用程序(例如"Microsoft Excel 8.0对象库")来完成此操作.

使用早期绑定创建Excel的新实例:

 Dim oXL As Excel.Application
 Set oXL = New Excel.Application

在任何一种情况下,顺便提一下,您可以首先尝试获取现有的Excel实例,如果返回错误,则可以在错误处理程序中创建新实例.


我知道这个回复是陈旧的,它来自其他地方,但它不准确.后期绑定意味着使用CreateObject,但CreateObject并不一定意味着后期绑定.绑定不适用于实例化对象的方法,仅适用于声明它的方式.如果您将对象声明为"As Excel.Application",那么实例化它并不重要.我总是使用CreateObject来实例化对外部库的对象引用,这样我就可以在早期和晚期绑定之间切换,只需要切换一行(而不是两行) - 声明对象的行.

4> 小智..:

Herbert Schildt C ++书中类似但更详细的答案:

早期绑定是指在编译时发生的事件。本质上,当在编译时知道调用函数所需的所有信息时,就会发生早期绑定。(换句话说,早期绑定意味着在编译过程中绑定了对象和函数调用。)早期绑定的示例包括普通函数调用(包括标准库函数),重载函数调用和重载运算符。早期绑定的主要优点是效率。因为调用函数所需的所有信息都是在编译时确定的,所以这些类型的函数调用非常快。

早期绑定的反义词是后期绑定。后期绑定是指直到运行时才解决的函数调用。虚函数用于实现后期绑定。如您所知,当通过基本指针或引用进行访问时,实际调用的虚函数由指针指向的对象类型确定。因为在大多数情况下无法在编译时确定,所以直到运行时才链接对象和函数。后期绑定的主要优点是灵活性。与早期绑定不同,后期绑定使您可以创建能够响应程序执行时发生的事件的程序,而不必创建大量的“意外代码”。请记住,由于函数调用要等到运行时才能解决,因此后期绑定可能会使执行时间变慢。但是今天

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