是按值调用和按值传递的同义词吗?

时间:2011-02-13 22:12:20

标签: c# calling-convention evaluation-strategy

我一直认为按值调用按值传递是同义词。但是,我最近听到有人将它们称为不同。它们是一样的吗?

我也在谈论他们相应的 by-reference 条款。

5 个答案:

答案 0 :(得分:6)

“有人”,这是错误的。查看直接回答您问题的维基百科article。你可以在这篇文章中指出某些“某人”:

  

按价值评估(也是   被称为按值传递)   最常见的评估策略,......

答案 1 :(得分:4)

他们是同义的。

“call”表示方法,“pass”表示(参数)。

示例:

  1. 参数#1通过值/参考传递。
  2. 参数按值传递。
  3. 该方法用于按值上下文调用。

答案 2 :(得分:1)

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

但是,我认为你问的是错误的观众。如果你的同事认为他们不同,那么你和他们的理解是不匹配的。我认为它们是否相同是无关紧要的,重要的是你的同事实际意味着什么。

答案 3 :(得分:1)

他们是同义词。术语按值调用按值传递完全相同。

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

示例:

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

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

答案 4 :(得分: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

然后是“通过引用打电话?”