使用关键字“ref”传递类对象有什么用?它们默认通过引用传递

时间:2012-04-23 07:55:51

标签: .net string class parameters ref

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

  public void Func1(ref String abc)
  {
  }

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

与...有什么不同。

 public void Func1(String abc)
 {
 }

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

2 个答案:

答案 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将传递引用,这也允许您修改原始调用者中的指针。

相关问题