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);
            ......
        }

解决方案 »

  1.   

    progame里面的temperature 和AAA实力里面的temperature 不是同一个;第二种写法把变化后的temperature 又赋给了program里面的temperature ;第一种写法没有
      

  2.   

                temperature = Program.temperature;
                 Program.temperature = temperature + 1; //自然升温// 没有必要那么麻烦,直接这样就好了:
    ++Program.temperature ;
      

  3.   

    我还是把全部代码传上来。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("*****室温太低了*****");
                }        }    }
    }
      

  4.   

    试试把类里的温度变量temperature写成静态的试试
      

  5.   

    我找到原因了。
     //定义空调器类
        public class AirConditioner
    中的方法的最下面有一句
    Program.temperature = temperature;这样Program.temperature在前面虽然被累加了,但在这里又被写回累加前的值了。我说怎么累加不上去。