public void MethodSample1(Itest variable)
    {
        variable.TestString = "some sample data";
        Itest var1 = variable;
        Console.WriteLine(variable.TestString);
        MethodSample2(variable);
        Console.WriteLine(variable.TestString);
        Console.WriteLine(var1.TestString);

    }

    public void MethodSample2(Itest variable)
    {
        variable.TestString = "testdata";
    }

    public interface Itest
    {
      string TestString { get; set; }
    }


期望控制台的两行输出都显示“一些样本数据”,但是TestString似乎正在被新值覆盖吗?是否不像“默认情况下,C#中的所有值都按值传递”?

简而言之,如何在MethodSample1中保留“ TestString”的值?

(我遇到了这个问题,因为我的所有项目都基于单个界面)

即使保留了价值,它也确实可以反映出来!奇怪!

最佳答案

对于您当前的问题,我认为您无法阻止任何方法修改传递给它的参数。

您的variable是引用类型对象,在C#中,引用类型的地址通过值传递给方法,这就是为什么看到更改的原因。例如,如果您的方法编写如下:

public void MethodSample2(Itest variable)
{
    variable = null;
}


您不会在MethodSample1方法中看到更改,因为引用地址是按值传递的。


  是否不像“默认情况下在C#中所有值都通过
  值?”。


值类型按值传递,在您的情况下,variable是引用类型。

您应该看到Parameter Passing C# by Jon Skeet

不确定为什么必须修改传递的对象。要解决此问题,您可以创建属性的临时副本,然后在该方法存在之前设置该值。

关于c# - 按值传递接口(interface)成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14232087/

10-17 02:45