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/