我刚刚注意到.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 将通过引用传递,这也允许您修改原始调用者中的指针。