类中变量的意外行为

时间:2013-05-05 09:47:20

标签: c# class variables

我有一个系统计时器每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转移到“Termocoppia”类中的方法“Calcola”。我用断点调试它,并确认该值是在类中接收的。

“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 = milliV”行调试变量tempEx,tempEx的值为0,我不明白为什么?我很确定我在这里犯了一个初学者的错误,但是我无法解决这个问题。

2 个答案:

答案 0 :(得分:2)

您有两个名为'tempEx'的变量,一个字段和一个参数。您的Calcola函数会修改tempEx参数(不是字段)并返回相同的值。但是调用者没有对返回的值做任何事情。我的建议是将两个这个值放入字段tempEx

修改你的行:

thm.Calcola(milliV, tempEx);

成:

tempEx = thm.Calcola(milliV, tempEx);

建议:使用编码标准来防止这种错误。对于参数使用camelCasing(so tempEx),对于字段使用下划线(_tempEx)。

答案 1 :(得分:1)

您没有使用Termocoppia.Calcola的返回值。

private void OnTimerTick(object sender, EventArgs e)
{
    double milliV = Convert.ToDouble(textBox8.Text); //I have a value of 1.111
    Termocoppia thm = new Termocoppia();
    // the return value from Cacola has to be assigned to tempEx
    tempEx = thm.Calcola(milliV, tempEx);
    textBox7.Text = tempEx.ToString();
}

您不应该将tempEx的相同变量名称用作成员变量和方法参数!