What is the use passing Class Object using keyword

2019-10-16 15:24发布

这个问题已经在这里有一个答案:

  • 什么是C#参考类型的变量使用“裁判”的? 10个回答
  • “REF”的关键字和引用类型[重复] 4个答案

我只注意到.NET允许我们做的这样。

  public void Func1(ref String abc)
  {
  }

我在想,“裁判”的文章让任何意义???? 作为字符串是一类(引用类型)

它是从什么不同。

 public void Func1(String abc)
 {
 }

我只是问,因为我很困惑。 无论是丢失了一些概念或他们是同一个东西,“裁判”关键字在这方面没有任何意义。

Answer 1:

参数是通过默认为通过。 如果您传递参数给方法,原来的变量不被修改。 如果你传递一个参数作为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新值。



Answer 2:

默认情况下没有ref关键字,字符串指针的一个拷贝的情况下(通过按值)。 使用REF将通过按基准,这也可以让你修改指针在原来的调用者。



文章来源: What is the use passing Class Object using keyword “ref”? They are by by default pass by reference [duplicate]