我刚注意到.net允许我们这样做。
public void Func1(ref String abc)
{
}
我想知道“ref”关键字有什么意义????因为String是一个类(引用类型)
与...有什么不同。
public void Func1(String abc)
{
}
我只是在问我是否感到困惑。要么缺少一些概念,要么它们是同一个东西,而“ref”关键字在这种情况下没有任何意义。
答案 0 :(得分:2)
默认情况下,参数由值传递。如果将参数传递给方法,则不会修改原始变量。如果您将参数作为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
就会引用另一个String。 foo
未被修改,仍然指向相同的字符串
在Func2
中,您传递了对foo
的引用,因此当您为abc
分配一个新值(即对另一个字符串的引用)时,您实际上正在为foo
分配一个新值。
答案 1 :(得分:1)
默认情况下,如果没有 ref 关键字,则会生成字符串指针的副本(按值传递)。使用ref将传递引用,这也允许您修改原始调用者中的指针。