C#—事件的使用

事件 Event

  1. 事件是委托的一个实例。
  2. 事件是一个操作,应用程序需要在事件发生时响应事件。例如,中断。事件是用于进程间通信。
  3. 事件需要在类中声明。
  4. 只需要将要做到事情方法 绑定到事件中即可一起完成所有事件。

声明一个事件

  • 事件的声明依赖于委托
public delegate void DoSomeThing(int a); //一个委托
class MyEvent
{
    //事件:就是委托的一个变量 加上关键字Event修饰 如下是一个事件
    public event DoSomeThing DoSomeThingHandleEvent; 
}

到此我们已经声明了一个 DoSomeThingHandleEvent 事件。

事件的使用

  • 为事件绑定方法
public delegate void DoSomeThing(int a); //一个委托
class MyEvent
{
    //事件:就是委托的一个变量 加上关键字Event修饰 如下是一个事件
    public event DoSomeThing DoSomeThingHandleEvent; 

    public void InvokeStartEvent()
    {
        Console.WriteLine("---------------------InvokeEvent-----");
        if (DoSomeThingHandleEvent != null) //判断这个事件是否为空 不为空则启动事件
        {
            DoSomeThingHandleEvent.Invoke(5); //执行者 启动,一般通过Invoke启动
            //DoSomeThingHandleEvent(5); //也可以这样启动
        }
    }
}

class Program
{
        static void Main(string[] args)
        {
            MyEvent myevent = new MyEvent();
            myevent.DoSomeThingHandleEvent += new DoSomeThing(ShowSomeThing); //  注册事件
            myevent.DoSomeThingHandleEvent += ShowSomeThing; //简化 注册事件
            myevent.InvokeStartEvent(); //调用了
        }
        static void ShowSomeThing(int a)
        {
            Console.WriteLine("showSomething" + a);
        }
}

实际使用一个事件

  • 热水器提醒事例:
public delegate void WaterHeaterDelegate(int Temperature);

class WaterHeater
{

    public event WaterHeaterDelegate WaterDele;

    
    public void Shaoshui() //开始事件
    {
        for (int i = 0; i <= 100; i++)
        {
            if (i>95)
            {
                WaterDele.Invoke(i); //调用启动事件
            }
        }
    }

    public void WaterHot(int temperature) //水温提示
    {
        Console.WriteLine("水已经有{0}C了", temperature);
    }

    public void WaterBoiling(int temperature) //水烧开
    {
        Console.WriteLine("水已经烧开了"+ temperature);
    }
}

class Program
    {
        static void Main(string[] args)
        {
            //方法一:绑定外部类中的方法
            WaterHeater water = new WaterHeater();  //热水器实例化对象
            water.WaterDele += new WaterHeaterDelegate(water.WaterHot); //绑定事件
            water.WaterDele += new WaterHeaterDelegate(water.WaterBoiling); //绑定事件
            //water.WaterDele += (new WaterHeater()).WaterHot;//绑定事件的 另一种形式
            water.Shaoshui();

            //方法二:绑定内部类中的方法
            //water.WaterDele += Water_WaterDele;
            //water.WaterDele += Water_WaterDele1;
            //water.Shaoshui();
        }

        private static void Water_WaterDele1(int Temperature)
        {
            Console.WriteLine("水已经烧开了" + Temperature);
        }

        private static void Water_WaterDele(int Temperature)
        {
            if (Temperature==100)
            {
                Console.WriteLine("水已经有{0}C了", Temperature);
            }
        }
}

你可能感兴趣的:(C#—事件的使用)