1

我刚刚注意到.net 允许我们这样做。

  public void Func1(ref String abc)
  {
  }

我想知道“ref”关键字是否有意义????因为字符串是一个类(引用类型)

有什么不同吗。

 public void Func1(String abc)
 {
 }

我只是问,因为我很困惑。要么缺少一些概念,要么它们是同一个东西,“ref”关键字在这种情况下没有意义。

4

2 回答 2

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引用另一个字符串。foo没有被修改,仍然指向同一个字符串。
Func2您传递对 的引用时foo,因此当您分配abc一个新值(即对另一个字符串的引用)时,您实际上是在分配foo一个新值。

于 2012-04-23T07:58:31.443 回答
1

默认情况下,如果没有ref关键字,则会生成字符串指针的副本(按值传递)。使用 ref 将通过引用传递,这也允许您修改原始调用者中的指针。

于 2012-04-23T07:58:31.380 回答