5

我一直认为按值调用和按值传递同义词。然而,我最近听到有人提到他们,好像他们是不同的。它们是一样的吗?

我也在谈论他们相应的参考术语。

4

5 回答 5

6

“某人”是错误的。查看直接回答您问题的维基百科文章。您也可以在本文中指出某个“某人”:

Call-by-value评估(也称为pass-by-value)是最常见的评估策略,...

于 2011-02-13T22:18:15.633 回答
4

它们是同义词。

“调用”表示方法,“传递”表示一个(该)参数。

例子:

  1. 参数 #1 通过值/引用传递。
  2. 参数是按值传递的。
  3. 该方法在按值调用上下文中使用。
于 2011-02-13T22:15:15.633 回答
1

是的,这些术语是我理解的同义词。

但是,我认为您问错了听众。如果您的同事认为他们不同,那么您和他们的理解不匹配。我是否认为它们相同无关紧要,重要的是您的同事的实际意思。

于 2011-02-13T22:14:55.633 回答
1

它们是同义词。术语call-by-value 的含义与pass-by-value完全相同。

但是,我更喜欢按值传递的形式,因为它是传递它所引用的参数。调用可以具有按值传递的参数以及按引用传递的参数。

例子:

public void Something(string name, int count, ref string target, ref int result)

第一个参数是值传递的引用,第二个是值传递的值,第三个是引用传递的引用,第四个是引用传递的值。

于 2011-02-13T22:20:29.447 回答
1

我一直认为它们是同义词,但是当我想到它时,也许它们试图区分直接调用方法和通过引用(即委托)调用方法。也就是说,鉴于此:

public delegate void MyDelegate();

class MyClass
{
    public void DoSomething()
    {
        // ...
    }
}

MyClass thing = new MyClass();

他们是不是想说,如果你写:

thing.DoSomething();

那么这是一个“按值调用”,但如果你写:

MyDelegate dlgt = thing.DoSomething;
dlgt();  // calls thing.DoSomething through the delegate reference

那么这是一个“通过引用调用?”

于 2011-02-13T22:28:22.587 回答