1

I just noticed .net allows us to do like this.

  public void Func1(ref String abc)
  {
  }

I was wondering "ref" keyword makes any sense???? as String is a Class(reference type)

Is it any different from.

 public void Func1(String abc)
 {
 }

I am just asking as i am confused. either missing some concept or they are one and the same thing and "ref" keyword has no sense in this context.

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 に答える