请解释后期绑定过程

时间:2017-08-17 03:53:13

标签: c# interface exe bind late-binding

我试图制作一个简单的插件。开发人员文档说明了这一点:

  

延迟绑定到 ETABS.exe ,创建 ETABSObject 的实例,并获取对 cOAPI 界面的引用。

我对如何延迟绑定到已经运行的exe非常困惑。如果你能给我一个例子或指出我正确的方向,我会非常感激。我已经在墙上撞了好几天。

1 个答案:

答案 0 :(得分:0)

早期绑定

执行 Early Binding 时,会将对象分配给声明为特定对象类型的变量。早期绑定对象基本上是强类型对象或静态类型对象。在编译期间检测和检查的早期绑定,方法,函数和属性,在应用程序执行之前执行其他优化。使用早期绑定的最大优点是性能和易于开发。

示例:

System.IO.FileStream FS ;
FS = new System.IO.FileStream("C:\\temp.txt", System.IO.FileMode.Open);

上面的代码创建一个变量FS来保存一个新对象,然后为该变量分配一个新对象。这里的类型在运行期间运行变量之前是已知的.DataStream是一个特定的对象类型,分配给FS的实例是早期绑定的。

在执行Early Binding时,编译器可以在编译时确保函数将存在并在运行时可调用。此外,编译器保证函数采用确切数量的参数,并且它们是正确的类型,并且可以检查返回值是否是正确的类型。

后期绑定

相比之下,在Late绑定函数中,仅在运行时检测和检查方法,变量和属性。这意味着编译器在运行时不知道对象的对象类型或实际类型,对象包含哪些方法或属性。 Late绑定的最大优点是这种类型的对象可以保存对任何对象的引用,但缺少早期绑定对象的许多优点。

示例:

//The var keyword instructs the compiler to infer the type of the variable
 // from the expression on the right side of the initialization statement.     
  var eTabsObj = null;//notice the var keyword
  //instead of var you can use an interface variable to hold reference
  // of late bind object
  eTabsObj = CreateObject("<create an instance of ETABSObject>");//executed at runtime

上面的代码不需要预先设置引用,实例创建和类型确定将在运行时进行。值得注意的是,Late绑定只能用于访问声明为Public的类型成员。访问声明为“朋友”或“受保护的朋友”的成员会导致运行时错误。

要回答您的具体问题,您将在运行时创建一个对象,这是有道理的,因为当ETABS.exe的作者编写代码时,他并不知道您希望如何在你的项目中使用它。你以适合你的要求的方式创建了一个对象。

注意我们如何使用 var 来保存对ETABS对象的引用,var基本上是一个语法糖,它从被分配的对象中推断出对象类型。现在,您可以使用接口变量(ETABS类实现)来保存对象的引用,而不是使用 var

执行后期绑定时,可能不存在目标函数。目标函数也可能不接受传递给它的参数,并且可能返回错误类型的值。

希望这有帮助!