【发布时间】:2015-08-06 09:53:42
【问题描述】:
我以为我理解其中的区别,但现在我不太确定。我已经多次阅读技术答案,但我不明白发生了什么。我有这个例子。
class Program
{
static void Main()
{
int val = 0;
Example1(val);
Console.WriteLine(val); // Still 0!
Example2(ref val);
Console.WriteLine(val); // Now 2!
Example3(out val);
Console.WriteLine(val); // Now 3!
}
static void Example1(int value)
{
value = 1;
}
static void Example2(ref int value)
{
value = 2;
}
static void Example3(out int value)
{
value = 3;
}
}
我一直认为默认参数的区别在于,如果我将val传递给Example1,我就不能使用赋值。
但是使用 ref 关键字 val 仍然为 0,但我创建了一个引用,现在它被视为 Example2(ref val) 中的变量“值”。到目前为止,我是否对任何事情感到困惑?如果我用过
int value = 0;
Example1(value);
Console.WriteLine(value); // this would then return 1 correct?
那么,out 关键字发生了什么?和 ref 一样吗?
【问题讨论】:
-
“默认参数”是什么意思?你的意思是当
ref或out没有被使用? -
@JohnSaunders 是的,当不使用 ref 和 out 时。我希望它是重复的,我已经多次阅读该帖子。我还是不明白。
-
您的最后一个代码块“如果我使用过..”正是您在第一个代码块中
Main函数的前 3 行所做的。 -
我认为它是重复的,你只是不明白。你没有得到什么?请注意,传递值类型(如
int)和传递引用类型(如类的实例)之间有些不同。 -
顺便说一句,请停止使用“默认参数”一词。这与
public void Method(int val = 1)的 C# 用法太接近了,如果您想传递1,则不必传递val。