Пожалуйста, объясните поздний процесс связывания

Я пытаюсь сделать простое дополнение. Документация для разработчиков гласит:

Позднее связывание с ETABS.exe, создание экземпляра объекта ETABSOb и получение ссылки на интерфейс cOAPI.

Я очень смущен тем, как поздно связать с уже запущенным exe. Если бы вы могли привести мне пример или указать верное направление, я был бы очень признателен. Я бился головой об стену в течение нескольких дней.

1 ответ

Решение

Раннее связывание

При выполнении раннего связывания объект назначается переменной, объявленной как объект определенного типа. Объекты раннего связывания в основном являются объектами сильного типа или объектами статического типа. В то время как раннее связывание, методы, функции и свойства, которые обнаруживаются и проверяются во время компиляции, выполняют другие оптимизации перед выполнением приложения. Самое большое преимущество раннего связывания заключается в производительности и простоте разработки.

Пример:

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

Выше кода создает переменную FS для хранения нового объекта, а затем назначает новый объект для переменной. Здесь тип известен до того, как переменная используется во время выполнения. FileStream - это определенный тип объекта, экземпляр, назначенный для FS, имеет раннюю привязку.

При предварительном формировании раннего связывания компилятор может гарантировать во время компиляции, что функция будет существовать и будет вызываться во время выполнения. Более того, компилятор гарантирует, что функция принимает точное количество аргументов и что они имеют правильный тип, и может проверять, что возвращаемое значение имеет правильный тип.

Позднее связывание

Напротив, в поздних функциях привязки методы, переменные и свойства обнаруживаются и проверяются только во время выполнения. Это подразумевает, что компилятор не знает, какой тип объекта или фактический тип объекта или какие методы или свойства содержит объект до времени выполнения. Самым большим преимуществом позднего связывания является то, что Объекты этого типа могут содержать ссылки на любой объект, но не имеют многих преимуществ ранних объектов.

Пример:

//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

Приведенный выше код не требует предварительной установки ссылки, создание экземпляра и определение типа будут выполняться во время выполнения. Важно отметить, что поздняя привязка может использоваться только для доступа к членам типа, объявленным как Public. Доступ к членам, объявленным как Друг или Защищенный друг, приводит к ошибке во время выполнения.

Чтобы ответить на ваш конкретный вопрос, вы создаете объект во время выполнения, и это имеет смысл, потому что, когда автор ETABS.exe написал код, он не знал, как вы хотели бы использовать его в своем проекте. Вы создали объект таким образом, который соответствует вашему требованию.

Обратите внимание, как мы использовали var для хранения ссылки на объект ETABS, var в основном является синтаксическим сахаром, который выводит тип объекта из назначаемого объекта. Теперь вместо использования var вы можете использовать интерфейсную переменную, которую реализует класс ETABS для хранения ссылки на объект.

При выполнении позднего связывания существует вероятность, что целевой функции может не существовать. Также целевая функция может не принимать переданные ей аргументы и может иметь возвращаемое значение неправильного типа.

Надеюсь это поможет!

Другие вопросы по тегам