44

我目前正在阅读 Daniel M. Solis 的一本书,名为“Illustrated C# 2010”。书上说:

“当调用或调用方法时......”

这两个术语有什么区别?

4

7 回答 7

15

根据我的研究(个人和无偿),查看这些术语在编程文献和“野外”中的常用方式,我发现这些定义似乎符合它们的用法。

执行是指运行代码的过程。确切的方法无所谓,能不能编译,能不能用电脑做。

Applying/Application是指将参数绑定到函数。申请可以是部分的也可以是完整的。从函数式编程世界来看,部分应用程序会产生另一个参数较少的函数,而完整的应用程序会产生一个 thunk。Thunks 是没有参数的函数,可以帮助“惰性求值”。

调用/调用是指调度函数及其完全绑定的参数执行所需的过程。此类系统包括将参数推入堆栈并将 PC 转移到新地址,将消息/对象/函数/thunk 放在队列中以供稍后执行或各种其他 RPC 系统。确切的机制并不重要。未来执行的调度概念很重要。调用要求 will 函数执行。

跟注是最不明确的。通常是指完全应用函数然后调用它的组合过程,通常带有您的代码将等待返回值的附加语义。

另请注意,从正在编写的当前代码的角度来看,所有这些术语都是主观的。通过 RPC 调用调用函数只是从客户端调用它。从服务器端来看,请求具有不同的调用点,如果该函数甚至作为服务器端的函数具有任何“意义”的话。

于 2016-10-29T09:41:13.757 回答
14

函数调用是指您自己在程序中调用函数。而函数调用是它被自动调用的时候。

例如,考虑这个程序:

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。

来源:网络

于 2013-08-29T08:11:11.673 回答
2

方法调用是一个术语,通常指的是由于直接调用存在问题或困难而间接调用方法(函数)。

例如在并行编程的上下文中:考虑一个应用程序空间内的两个线程并行运行。调用驻留在另一个线程上的对象的公共方法会引发跨线程调用异常,因为可能会发生竞争。解决方案是调用对象来执行方法,并将剩余的作业交给对象来管理并行请求。

另一个例子是当你有一个委托指向某处的方法时。当您要求委托调用该(未知)方法时,您调用该方法以运行。

于 2013-08-29T08:22:25.373 回答
2

也许他只是认为“call”和“invoke”这两个词是同义词,而只想提到这两个词,因为这两个词都可以在野外遇到。在那种情况下不能使用吗

于 2013-08-29T08:22:48.173 回答
1

当您在代码中直接执行该方法时,它称为Calling。当其他人为您执行它时,它是Invoking。这是我从Control.Invoke方法上理解的。

于 2019-06-06T10:11:21.050 回答
0

“调用”似乎意味着通过中介机制间接调用方法。我敢肯定作者模糊了确切的含义。但是,他们必须尝试描述调用方法的不同方式,否则该术语一开始就不会出现。

此外,“调用”的一般(非计算机)定义通常意味着呼唤更高的权力寻求帮助。这将转化为向中介实体寻求帮助以完成某事。

于 2019-08-07T14:03:52.883 回答
-1

简单的“调用”是保证方法将被采用 “调用”是当我们只是要求方法将在适当的时间被采用

例如,主线程 (GUI) 可以通过调用来修改控件,但是当您有另一个线程想要修改控件时,它只需在主线程准备好时要求主线程执行此操作

于 2021-03-23T20:22:21.980 回答