1
   public void main()
   {    
    string test = "testing";
    ChangeVal(test);
    Console.WriteLine(test);
   }
private void ChangeVal(string test)
{
    test = "in child";
}

String がクラスの場合。そして、文字列をパラメーターとして関数に渡します。関数内のその文字列の値を変更します。ただし、メイン関数では以前の値が表示されます。テスト値を出力します。

整数と文字列の2つのメンバー変数を持つFooクラスを作成したとき。クラスのオブジェクトをパラメーターとして渡し、関数内のメンバー変数の値を変更したとき。メイン関数で更新された値を提供します

public class Foo
{
    public string test = "testing";
    public int i = 5;

}

public void main()
{
        Foo obj=new Foo();
        Console.WriteLine(obj.test);
        ChangeVal(obj);
        Console.WriteLine(obj.test);
}

private void ChangeVal(Foo obj)
{
    obj.test = "in child";
    obj.i = 5;
}

文字列がクラスの場合。変数の値を更新します。文字列は Unicode 文字のシーケンスである可能性があるため、最初のケースでは値を更新しません。これを詳細に説明できる機関はありますか。

4

2 に答える 2

3

関数内のその文字列の値を変更します

文字列は不変です。文字列の値を変更することはできません。同じ参照に別の文字列を割り当てることはできますが、 を使用して参照を渡す必要がありますref

public void main()
{    
  string test = "testing";
  ChangeVal(ref test);
  Console.WriteLine(test);
}

private void ChangeVal(ref string test)
{
    test = "in child";
}

Fooただし、クラスは変更可能であるため、そのメンバーに異なる値を割り当てることができます。

于 2012-11-20T12:17:23.747 に答える
2

メインスレッドで更新された var を取得するために、参照によってパラメーターを渡すようにしてください。

private void SeString(ref string chain)
        {
            chain="new string";

        }

次に呼び出します。

string variable="hello";
SeString(ref  variable);

文字列出力は「新しい文字列」です

于 2012-11-20T12:18:26.963 に答える