using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplication34
{
    class Program
    {
        static void Main(string[] args)
        {
            Heater h = new Heater();
            alertM a = new alertM();
           
            h.BoilEvent += a.AM;

            h.Boiled();

            Console.ReadLine();
        }
    }

    public delegate void BoilHandler(object sender,BoilEventArgs e);

    public class Heater
    {
        public int temperature;
        public event BoilHandler BoilEvent;
        public void Boiled()
        {
            for (int i = 0; i <= 100; i++)
            {
                temperature = i;
                
                

                if (temperature > 95)
                {
                    
                    BoilEvent(this, new BoilEventArgs(temperature));

                    Thread.Sleep(2000);
                }
            }

            
        }
    }

    public class alertM
    {
        public void AM(object sender,BoilEventArgs e)
        {
            Console.WriteLine("水马上就要开了"+e.temperature);
        }
    }

    public class BoilEventArgs : EventArgs
    {
        public int temperature;
        public BoilEventArgs(int param)
        {
            temperature = param;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication35
{
    class Program
    {
        static void Main(string[] args)
        {
            List<User> list1 = new List<User>();
            User u1 = new User("Daniel");
            User u2 = new User("Acadia");
            User u3 = new User("Johnes");
            list1.Add(new User("Daniel"));
            list1.Add(u2);
            list1.Add(u3);


            ChangeName cn = new ChangeName(list1);
            cn.RenameEvent += cn.RE;

            cn.Rename("testtest", 2);


            Console.ReadLine();
        }
    }
    
    public class User
    {
        public string Name;
        public User(string name)
        {
            Name = name;

        }
    }

    public class ChangeName
    {
        List<User> listuser;
        public delegate void RenameHandler(object sender, RenameEventArgs e);
        public event RenameHandler RenameEvent;
        public ChangeName(List<User> list)
        {
            listuser = list;
        }

        public void Rename(string NewName,int i)
        {
            if (i < listuser.Count && i>0)
            {
                string OldName = listuser[i].Name;
                listuser[i].Name = NewName;
                RenameEvent(this, new RenameEventArgs(OldName,NewName,i));
            }
        }

        public void RE(object sender,RenameEventArgs e)
        {
            Console.WriteLine("第" + e.Order+"项,用户名称已经由" + e.OldName + "改为了 " + e.NewName);
        }
    }

    public class RenameEventArgs : EventArgs
    {
        public string NewName;
        public string OldName;
        public int Order;
        public RenameEventArgs(string Oldparam,string Newparam,int i)
        {
            OldName = Oldparam;
            NewName = Newparam;
            Order = i;
        }
    }

}


备注:事件委托要放在事件发生的前面,如下:

            h.BoilEvent += a.AM;

            h.Boiled(); 


参考链接:

关于事件和委托,这篇写的太好了:http://www.cnblogs.com/jimmyzhang/archive/2007/09/23/903360.html#undefined


http://www.cnblogs.com/zhangchenliang/archive/2012/09/19/2694430.html