这个问题已经在这里有一个答案:
- 什么是C#参考类型的变量使用“裁判”的? 10个回答
- “REF”的关键字和引用类型[重复] 4个答案
我只注意到.NET允许我们做的这样。
public void Func1(ref String abc)
{
}
我在想,“裁判”的文章让任何意义???? 作为字符串是一类(引用类型)
它是从什么不同。
public void Func1(String abc)
{
}
我只是问,因为我很困惑。 无论是丢失了一些概念或他们是同一个东西,“裁判”关键字在这方面没有任何意义。
参数是通过值默认为通过。 如果您传递参数给方法,原来的变量不被修改。 如果你传递一个参数作为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将通过按基准,这也可以让你修改指针在原来的调用者。
文章来源: What is the use passing Class Object using keyword “ref”? They are by by default pass by reference [duplicate]