我刚刚注意到.net 允许我们这样做。
public void Func1(ref String abc)
{
}
我想知道“ref”关键字是否有意义????因为字符串是一个类(引用类型)
有什么不同吗。
public void Func1(String abc)
{
}
我只是问,因为我很困惑。要么缺少一些概念,要么它们是同一个东西,“ref”关键字在这种情况下没有意义。
我刚刚注意到.net 允许我们这样做。
public void Func1(ref String abc)
{
}
我想知道“ref”关键字是否有意义????因为字符串是一个类(引用类型)
有什么不同吗。
public void Func1(String abc)
{
}
我只是问,因为我很困惑。要么缺少一些概念,要么它们是同一个东西,“ref”关键字在这种情况下没有意义。
参数默认按值传递。如果将参数传递给方法,则不会修改原始变量。但是,如果您将参数作为ref
参数传递,则传入的原始变量可能会被修改。
试试这个:
public void Func1(String abc) {
abc = "Changed from Func1";
}
public void Func2(ref String abc) {
abc = "Changed from Func2";
}
public void main() {
string foo = "not changed";
Func1(foo);
Console.WriteLine(foo);
Func2(ref foo);
Console.WriteLine(foo);
}
您将得到的输出是:
not changed
Changed from Func2
在Func1
一个副本中foo
被创建,它指的是同一个字符串。但是,一旦您为其分配另一个值,该参数就会abc
引用另一个字符串。foo
没有被修改,仍然指向同一个字符串。
在Func2
您传递对 的引用时foo
,因此当您分配abc
一个新值(即对另一个字符串的引用)时,您实际上是在分配foo
一个新值。
默认情况下,如果没有ref关键字,则会生成字符串指针的副本(按值传递)。使用 ref 将通过引用传递,这也允许您修改原始调用者中的指针。