字符串类行为

时间:2012-11-20 12:14:49

标签: c# .net oop

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

如果String是一个类。 我将字符串作为参数传递给函数。在函数中更改该字符串的值。 但是在main函数中它显示了以前的值。它将打印测试值。

当我创建具有2个成员变量integer和string的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;
}

如果string是类。它将更新变量的值。 May string是Unicode字符的序列,这就是为什么它在第一种情况下不更新值的原因。 任何机构都可以详细解释这一点。

2 个答案:

答案 0 :(得分:3)

  

更改函数

中该字符串的值

字符串是不可变的。您无法更改字符串的值。您可以将另一个字符串分配给同一个引用,但是您需要使用ref传递引用。

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

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

但是,Foo类是可变的,因此您可以为其成员分配不同的值。

答案 1 :(得分:2)

尝试通过引用传递参数以在主线程中更新var:

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

        }

然后致电:

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

字符串输出是“new string”