我一直认为按值调用和按值传递是同义词。但是,我最近听到有人将它们称为不同。它们是一样的吗?
我也在谈论他们相应的 by-reference 条款。
答案 0 :(得分:6)
“有人”,这是错误的。查看直接回答您问题的维基百科article。你可以在这篇文章中指出某些“某人”:
按价值评估(也是 被称为按值传递) 最常见的评估策略,......
答案 1 :(得分:4)
他们是同义的。
“call”表示方法,“pass”表示(参数)。
示例:
答案 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
然后是“通过引用打电话?”