Подтвердить что ты не робот

Какая разница между "вызовом" и "вызовом"?

В настоящее время я читаю книгу Даниэля М. Солиса под названием "Иллюстрированный С# 2010". В книге говорится:

"Когда метод вызывается или вызывается..."

В чем разница между этими двумя терминами?

4b9b3361

Ответ 1

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

Вызов обычно используется в коде пользовательского интерфейса. В коде UI основным правилом Windows является то, что вы можете взаимодействовать только с пользовательским интерфейсом в потоке, создавшем пользовательский интерфейс. Поэтому, если вы хотите поговорить с пользовательским интерфейсом на вторичном потоке (например, рабочий поток), вы должны маршировать вызов в нужную нить. Обратите внимание, что это относится и к событиям. Они действительно не более чем вызовы методов. Метод Control.Invoke, который наследуется всеми элементами управления WinForm, позволяет вам вызвать произвольный метод в потоке пользовательского интерфейса. Метод обрабатывает процесс сортировки запроса на правильный поток и затем вызывает Invoke для метода. Это все еще слишком поздно, хотя вы заранее знаете, какой метод вы хотели бы назвать.

Ответ 2

Вызов функции - это когда вы вызываете функцию самостоятельно в программе. Хотя вызов функции - это когда он автоматически вызывается.

Например, рассмотрим эту программу:

struct s
{
  int a,b,s;

  s()
  {
    a=2;
    b=3;
  }

  void sum()
  {
    s=a+b;
  }
};

void main()
{
  struct s obj; //line 1
  obj.sum(); // line 2
}

Здесь, когда выполняется строка 1, вызывается функция (конструктор, т.е. s). Когда выполняется строка 2, вызывается функция sum.

источник: веб

Ответ 3

Из моего исследования (личного и неоплачиваемого), глядя на то, как эти термины используются в литературе по программированию и "в дикой природе", я обнаружил, что эти определения, кажется, соответствуют их использованию.

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

Применение/Приложение относится к привязке аргументов к функции. Заявка может быть как частичной, так и полной. Из мира функционального программирования, частичное приложение производит другую функцию с меньшим количеством параметров, в то время как полное приложение создает thunk. Thunks - это функции без параметров и могут помочь с "ленивой оценкой".

Invoking/Invocation относится к процессу, необходимому для планирования выполнения функции с ее полностью связанными аргументами. Такие системы включают передачу аргументов в стек и перенос ПК на новый адрес, размещение сообщений/объектов/функций/групповых сообщений в очереди для последующего выполнения или в различных других системах RPC. Точный механизм не имеет значения. Понятие планирования для будущего исполнения имеет значение. Вызов требует выполнения функции воли.

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

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

Ответ 4

Метод Invokation - это термин, обычно называемый косвенным вызовом метода (функции) из-за проблем или трудностей при вызове его напрямую.

Например, в контексте параллельного программирования: рассмотрите два потока внутри одного прикладного пространства параллельно. Вызов общедоступного метода объекта, находящегося на другом потоке, выдает исключение Invisionation Cross Thread, поскольку может произойти раса. Решение вызывает объект для выполнения метода и выполняет оставшуюся часть задания для управления параллельными запросами.

Другой пример - когда у вас есть делегат, указывающий на метод где-то. Когда вы попросите делегата вызвать этот (неизвестный) метод, вы вызываете метод для запуска.

Ответ 5

Может быть, он просто рассматривает термины "вызов" и "вызывать" синонимы и просто хочет упомянуть оба слова, потому что оба термина могут встречаться в дикой природе. Не было бы возможно использовать или в этом случае?

Ответ 6

Когда вы выполняете метод в своем коде, он вызывается напрямую. Когда кто-то другой выполняет это для вас, это вызывает. Это то, что я понимаю из метода Control.Invoke.

Ответ 7

"Вызывать", по-видимому, означает вызывать метод косвенно через посреднический механизм. Я уверен, что точное значение размыто авторами. Но они должны пытаться описать другой способ вызова метода, иначе термин не возник бы в первую очередь.

Кроме того, общее (не компьютерное) определение "вызывать" обычно означает обращение к высшей власти за помощью. Это будет означать обращение к посреднику за помощью в получении чего-либо.