now*_*ed. 2 .net c# .net-4.0 visual-studio-2010
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; }
}
Run Code Online (Sandbox Code Playgroud)
预计两个控制台输出行都打印"一些样本数据",但似乎TestString是被新值覆盖了?是不是"默认情况下在C#中所有的值都按值传递?".
总之,如何保存"TestString"的值MethodSample1?
(我遇到了这个问题,因为我的所有项目都基于单个界面)
即使保留了价值,它确实反映了!奇怪!
对于您当前的问题,我认为您不能阻止任何方法修改传递给它的参数.
您variable是一个引用类型对象,在C#引用类型的地址通过值传递给方法,这就是您看到更改的原因.例如,如果您的方法编写如下:
public void MethodSample2(Itest variable)
{
variable = null;
}
Run Code Online (Sandbox Code Playgroud)
你不会看到的变化在你的MethodSample1方法,因为参考地址是按值传递.
是不是"默认情况下在C#中所有的值都按值传递?".
值类型按值传递,在您的情况下variable是引用类型.
您应该看到Jon Skeet的参数传递C#
不确定为什么必须修改传递的对象,为了解决方法, 您可以创建属性的临时副本,然后在方法存在之前设置该值.
| 归档时间: |
|
| 查看次数: |
975 次 |
| 最近记录: |