C#中一个很简单的变量赋值问题

iloli 2009-09-16 11:30:44
Program是一个类名
Program.temperature是这个类中声明的静态变量


temperature是另一个类 AAA 中的变量

我要在这个AAA实例出的对象的方法里实现累加

这个写法就不对,加不了。
Program.temperature = temperature + 1

这个就对
Program.temperature = ++temperature

————————————————

或者说
用这一句:
Program.temperature = temperature + 1
就不对


而用这二句:
temperature = temperature + 1
Program.temperature = temperature
就正确。


————————————————————--
这是为什么呀,原因出在哪里?



这里我烤过来代码源文件的一部分:



namespace mydelegate
{
class Program
{
public static int temperature = 38;
public static int custemp = 25;
public static bool isStart = false;

static void Main(string[] args)
{
AirConditioner airconditioner = new AirConditioner();
Displayer displayer = new Displayer();
Alarmer alarmer = new Alarmer();

Uptemper uptemper = new Uptemper();

Timer mytimer = new Timer(2000);


uptemper.OverLoadTemperatureEvent += airconditioner.Start;
uptemper.OverLoadTemperatureEvent += displayer.Display;
uptemper.OverLoadTemperatureEvent += alarmer.Alarm;

mytimer.Elapsed += new ElapsedEventHandler(uptemper.Uptemp);

mytimer.Start();


Console.ReadKey();
}


}


//定义模拟升温类
public class Uptemper
{
public int temperature;
public int custemp;

......
......若干代码
......

public void Uptemp(object sender,ElapsedEventArgs e)
{
custemp = Program.custemp;
temperature = Program.temperature;

//用这二句做累加,成功!
//temperature = temperature + 1;
//Program.temperature = temperature ;

      //用这句做累加,也成功
//Program.temperature = ++ temperature

//用这句做累加,就失败,Program.temperature里的值一直都加不上去。
  Program.temperature = temperature + 1; //自然升温

//Console.WriteLine("随机数为{0} 加后结果{1}", x, Program.temperature);
OverLoadTemperatureEvent(temperature, custemp);


......


}


...全文
199 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
iloli 2009-09-17
  • 打赏
  • 举报
回复
我还是把全部代码传上来。



using System;
using System.Collections.Generic;
using System.Text;
using System.Timers;

namespace mydelegate
{
class Program
{
public static int temperature = 38; //默认当前温度。
public static int custemp = 25; //设定的空调停机温度。
public static bool isStart = false; //存放空调的工作状态。

static void Main(string[] args)
{
AirConditioner airconditioner = new AirConditioner();
Displayer displayer = new Displayer();
Alarmer alarmer = new Alarmer();

Uptemper uptemper = new Uptemper();

Timer mytimer = new Timer(2000);


uptemper.OverLoadTemperatureEvent += airconditioner.Start;
uptemper.OverLoadTemperatureEvent += displayer.Display;
uptemper.OverLoadTemperatureEvent += alarmer.Alarm;

mytimer.Elapsed += new ElapsedEventHandler(uptemper.Uptemp);



//如果空调初始状态为关,并且事件中不为空则执行定时器开始工作


mytimer.Start();


Console.ReadKey();
}


}


//定义模拟升温类
public class Uptemper
{
public int temperature;
public int custemp;

public delegate void OverLoadTemperatureHandler(int temperature, int custemp);
public event OverLoadTemperatureHandler OverLoadTemperatureEvent;

public void Uptemp(object sender,ElapsedEventArgs e)
{
custemp = Program.custemp;
temperature = Program.temperature;

//Random myran = new Random(); //声明随机数类型变量
//int x=myran.Next(0,3); //产生随机数


//temperature = temperature + 1;
Program.temperature = temperature+1; //自然升温

//Console.WriteLine("随机数为{0} 加后结果{1}", x, Program.temperature);

OverLoadTemperatureEvent(temperature, custemp);


Console.WriteLine("对象T{0} 类T{1}",temperature,Program.temperature);


}

}

//定义空调器类
public class AirConditioner
{

private int t=3; //定义空调降温幅度。
private int i=5; //定义停机时间隔。

public void Start(int temperature, int custemp)
{
if (i >= 5 && (Program.isStart == false) && Program.temperature > custemp)
{

Console.WriteLine("空调已启动!");
Program.isStart = true;
i = 0;
temperature = temperature - t;
}
else if (Program.isStart == true && Program.temperature > custemp)
{

Console.WriteLine("空调正在工作...");
Program.isStart = true;
temperature = temperature - t;
}

else
{
Program.isStart = false;
Console.WriteLine("空调已关闭···");
i++;

}

Program.temperature = temperature;

//如果空调状态为关,设定温度小于当前温度则空调开始工作

//if (Program.isStart = false&&)
//{
// temperature = temperature - 2;

// OverLoadTemperatureEvent(temperature, custemp);
//}

}



}



//定义显示器类
public class Displayer
{
public void Display(int temperature, int custemp)
{
Console.WriteLine("你设定的温度为: {0} 当前室温为: {1}", custemp, temperature);
}
}


//定义报警器类
public class Alarmer
{

public void Alarm(int temperature, int custemp)
{
if (temperature >= 38)
{
Console.WriteLine("室温太高了!!!");
}
else if (temperature > custemp)
{
Console.WriteLine("室温比较高了!");
}
else if (temperature <= custemp)
{
Console.WriteLine("<室温正常>");

}
else if (temperature <= 18)
{
Console.WriteLine("*****室温太低了*****");
}

}

}


}

iloli 2009-09-17
  • 打赏
  • 举报
回复
我找到原因了。
//定义空调器类
public class AirConditioner
中的方法的最下面有一句
Program.temperature = temperature;

这样Program.temperature在前面虽然被累加了,但在这里又被写回累加前的值了。我说怎么累加不上去。
windz 2009-09-17
  • 打赏
  • 举报
回复
试试把类里的温度变量temperature写成静态的试试

wuyi8808 2009-09-16
  • 打赏
  • 举报
回复
            temperature = Program.temperature;
  Program.temperature = temperature + 1; //自然升温



// 没有必要那么麻烦,直接这样就好了:
++Program.temperature ;
enihs 2009-09-16
  • 打赏
  • 举报
回复
progame里面的temperature 和AAA实力里面的temperature 不是同一个;第二种写法把变化后的temperature 又赋给了program里面的temperature ;第一种写法没有

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧