美文网首页C#学习之旅
C#—事件的使用

C#—事件的使用

作者: 你这样我很吃惊 | 来源:发表于2019-03-28 22:52 被阅读0次

事件 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#—事件的使用

    事件 Event 事件是委托的一个实例。 事件是一个操作,应用程序需要在事件发生时响应事件。例如,中断。事件是用于...

  • 教小明学一点点编程—C#篇(0)

    像小明这样使用C#的新同学,一定都会被C#的复杂的委托事件机制所困惑,那么我们不如解释一下什么是C#中委托。 委托...

  • C# winform 中 取消方向键对控件焦点控制的解决办法

    在C# winform 应用程序中,对于键盘响应事件,经常使用到"KeyPress"、“KeyUp”、"KeyDo...

  • 11.1学习总结

    今天回顾了委托,学习了事件。 事件是类在发生被关注的事情时用来提供通知的一种方式。 在C#中使用委托模型来实现事件...

  • unity & C#相关

    事件和委托 C#事件和Unity3d - CSDN博客 Unity常用的函数和遇到的C#的知识整理 Unity常用...

  • 11.1c#总结

    11.1事件事件是类在发生被关注的事情时用来提供通知的一种方式,在C#中使用委托模型来实现事件,谈论问题为什么要使...

  • 使用GRPC

    C# .NET Framework 对于C# .NET Framework平台,使用GRPC for C#,GRP...

  • C# HttpClient 与Jenkins Rest API

    c# 使用HttpClient

  • C# 调用C++ DLL示例

    C#中使用

  • C#特性(Attribute)-现学现用

    前言 想要灵性的使用C#反射机制,特性(Attribute)的使用是必不可少的。 C# 特性(Attribute)...

网友评论

    本文标题:C#—事件的使用

    本文链接:https://www.haomeiwen.com/subject/clqhbqtx.html