我有一个系统计时器每隔10秒触发一个事件。因此,每10秒我会从表单的主线程调用“Termocoppia”类,将“milliV”的值传递给它,并期望获取变量“tempEx”的值。类中变量的意外行为
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Tick += OnTimerTick;
timer.Interval = 10000;
timer.Start();
}
double tempEx;
//here a call the method "Calcola" in the class "Termocoppia"
private void OnTimerTick(object sender, EventArgs e)
{
double milliV = Convert.ToDouble(textBox8.Text); //I have a value of 1.111
Termocoppia thm = new Termocoppia();
thm.Calcola(milliV, tempEx);
textBox7.Text = tempEx.ToString();
}
值milliV然后被转移到方法“Calcola”之类的“Termocoppia”内。我用一个断点调试它,并确认该值是在该类中接收的。
类“Termocoppia”是这样的:
public class Termocoppia
{
public double Calcola(double milliV, double tempEx)//here the value of milliV is still 1.111
{
tempEx= milliV;//here the value of tempEx is 0???
return tempEx;
}
}
我希望收到回正好发送到大获好评类相同的价值,但我不断收到回0 如果我调试变量tempEx在行“tempEx = milliV”tempEx的值是0,我不明白为什么?我很确定我在这里犯了一个初学者的错误,但我不能正确解决这个问题。
你刚刚调试到该行或在它上面? tempEx将为0,直到您在下一行 – Sayse 2013-05-05 09:50:18
请记住,类型'double'的参数是按值传递的。 'tempEx = milliV;'不会改变你的'double tempEx;',因为它们是两个不同的对象。作为给参数赋值的非常简单的规则通常不是你想要的,除了'out'和'ref'参数外。 – Dirk 2013-05-05 09:54:09
我刚刚检查过,在“return tempEx”这一行的值是正确的(1.111),但是如果我在主窗体中检查到私有无效OnTimerTick,它就是0.看起来我无法恢复它。 – FeliceM 2013-05-05 09:55:53