Каково различие между статическим и динамическим связыванием?

Вы можете добавить метод к своему объекту:

object.workflowIsDone = () => toast.open();

и вызвать его, когда рабочий процесс завершится:

object.workFlowIsDone()
23
задан Bill the Lizard 16 September 2012 в 22:33
поделиться

5 ответов

В самых общих чертах статическое связывание означает, что ссылки разрешаются во время компиляции .

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!
}
27
ответ дан 29 November 2019 в 02:42
поделиться

Это зависит от того, когда происходит привязка: во время компиляции (статическая) или во время выполнения (динамическая). Статическая привязка используется при вызове простого метода класса. Когда вы начнете работать с иерархиями классов и виртуальными методами, компилятор начнет использовать так называемые VTABLE . В то время компилятор не знает точно, какой метод вызывать, и ему нужно подождать до времени выполнения, чтобы определить правильный метод, который нужно вызвать (это делается через VTABLE ). Это называется динамическим связыванием.

См. Статью Википедии о Виртуальных таблицах для более подробной информации и ссылок.

6
ответ дан 29 November 2019 в 02:42
поделиться

Статическое связывание: - это процесс разрешения типов, элементов и операций во время компиляции. Например:

Car car = new Car();
car.Drive();

В этом примере компилятор выполняет привязку путем поиска метода Drive без параметров для объекта car. Если не нашел этот метод! ищите методы, принимающие необязательные параметры , и, если этот метод не найден, снова ищите базовый класс из Car для этого метода, а если метод не был найден, этот метод снова ищет ] методы расширения для типа Car. Если совпадений не найдено, вы получите ошибку компиляции!

В этом случае привязка выполняется компилятором , и привязка зависит от статического знания типа объекта. Это делает статическую привязку.

Динамическое связывание: динамическое связывание откладывает связывание (процесс разрешения типов, членов и операций) от времени компиляции до времени выполнения . Например:

dynamic d = new Car();
d.Drive();

Динамический тип говорит компилятору, что мы ожидаем, что тип времени выполнения из d будет иметь метод Drive, но мы можем ' т статически . Поскольку d является динамическим, компилятор откладывает привязку Drive к d до времени выполнения .

Динамическое связывание полезно в случаях, когда во время компиляции мы знаем, что определенная функция, член операции существует, но компилятор не знал! Это обычно происходит, когда мы взаимодействуем с динамическими языками программирования , COM и отражением .

0
ответ дан 29 November 2019 в 02:42
поделиться

Привязка, выполняемая во время компиляции, является статической привязкой, а привязка, выполняемая во время выполнения, является динамической привязкой. В типе данных статической привязки указатель определяет, какой метод вызывается. Но в типе данных динамической привязки объекта определяется, какой метод вызывается.

-4
ответ дан 29 November 2019 в 02:42
поделиться

* Время выполнения: - * привязка переменных к ее значениям, а также привязка переменной к определенному месту хранения во время выполнения называется привязкой ко времени выполнения.

МОЖЕТ БЫТЬ ДВУХ ТИПОВ

  1. при входе в подпрограмму.
  2. В произвольные моменты времени выполнения.

ОБЪЕДИНЕНИЕ ВРЕМЕНИ: - (ВРЕМЯ ПЕРЕВОДА) Оно состоит из следующего.

  1. Связывание выбрано программистом.
  2. Связывание выбрано переводчиком.
  3. Связывание выбрано загрузчиком.
-5
ответ дан 29 November 2019 в 02:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: