C#(三十一)之自定义事件

这篇具有很好参考价值的文章主要介绍了C#(三十一)之自定义事件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

自定义事件:一定要注意下面六部曲

1:声明关于事件的委托

2:声明事件

3:编写触发事件的函数

4:创建事件处理程序

5:注册事件处理程序

6:触发事件

定义事件:

class dog
    {
        // 1 声明委托
        public delegate void dogEvent(object sender,EventArgs e);
       
        // 2 声明事件
        public event dogEvent doger;
 
        // 3 编写触发事件的方法
        public  void touch()
        {
            if (this.doger != null)
            {
                Console.WriteLine(@"来小偷了  狗叫了。");
                // 当前对象所引用的事件
                this.doger(this,new EventArgs());
            }
        }
    }
 
    class host
    {
        // 4 编写事件处理程序
        void hostDog(object sender, EventArgs e)
        {
            Console.WriteLine("主人,我抓住了小偷");
        }
 
        // 5 注册事件处理程序
        public host(dog dos)
        {
            // 事件注册(定义)必须用到  += 
            dos.doger += new dog.dogEvent(hostDog);
        }
   
    }

声明事件时event可以省略(最好不要省略)

// 2 声明事件
public dogEvent doger;

事件继承

事件event都是继承自EventArgs,通过继承EventArgs可以给自定义事件加参数。

public class AlarmEventArgs : EventArgs
    {
        // 定义小偷数量
        public int numberOfThieves;
        // 通过构造函数给小偷数量赋值
        public AlarmEventArgs(int numberValue)
        {
            numberOfThieves = numberValue;
        }  
    }
class Program
    {
        static void Main(string[] args)
        {
            dog dosa = new dog();
            host ho = new host(dosa);
            DateTime now = new DateTime(2019,12,31,23,59,50);
            DateTime minignt = new DateTime(2020,1,1,0,0,0);
 
            Console.WriteLine("时间再流逝");
 
            while (now < minignt)
            {
                Console.WriteLine("当前时间"+now);
                // 睡一秒
                System.Threading.Thread.Sleep(1000);
                // 当前时间加一秒
                now = now.AddSeconds(1);
            }
            // 给小偷数量赋值
            AlarmEventArgs e = new AlarmEventArgs(3);
            // 调用触发事件方法
            dosa.touch(e);
 
            Console.ReadKey();
        }
    }

效果图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pieLUA3K-1656122855547)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e4b07d6147c74508a97c3e6a0f8679d9~tplv-k3u1fbpfcp-zoom-1.image “1556633488315290.png”)]

测试使用全部代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace @event
{
    public class AlarmEventArgs : EventArgs
    {
        // 定义小偷数量
        public int numberOfThieves;
        // 通过构造函数给小偷数量赋值
        public AlarmEventArgs(int numberValue)
        {
            numberOfThieves = numberValue;
        }  
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            dog dosa = new dog();
            host ho = new host(dosa);
            DateTime now = new DateTime(2019,12,31,23,59,50);
            DateTime minignt = new DateTime(2020,1,1,0,0,0);
 
            Console.WriteLine("时间再流逝");
 
            while (now < minignt)
            {
                Console.WriteLine("当前时间"+now);
                // 睡一秒
                System.Threading.Thread.Sleep(1000);
                // 当前时间加一秒
                now = now.AddSeconds(1);
            }
            // 给小偷数量赋值
            AlarmEventArgs e = new AlarmEventArgs(3);
            // 调用触发事件方法
            dosa.touch(e);
 
            Console.ReadKey();
        }
    }
 
    class dog
    {
        // 1 声明委托
        public delegate void dogEvent(object sender,AlarmEventArgs e);
       
        // 2 声明事件
        public event dogEvent doger;
 
        // 3 编写触发事件的方法
        public  void touch(AlarmEventArgs e)
        {
            if (this.doger != null)
            {
                Console.WriteLine(@"来小偷了  狗叫了。");
                // 当前对象所引用的事件
                //this.doger(this,new EventArgs());
                this.doger(this, e);
            }
        }
    }
 
    class host
    {
        // 4 编写事件处理程序
        void hostDog(object sender, AlarmEventArgs e)
        {
            if(e.numberOfThieves <= 1)
            {
                Console.WriteLine("主人,我抓住了小偷");
            }
            else
            {
                Console.WriteLine("主人,人太多,赶紧报警");
            }
        }
 
        // 5 注册事件处理程序
        public host(dog dos)
        {
            // 事件注册(定义)必须用到  += 
            dos.doger += new dog.dogEvent(hostDog);
        }
   
    }
}

有好的建议,请在下方输入你的评论。

欢迎访问个人博客
https://guanchao.site

欢迎访问小程序:

c# 自定义事件,C#,后端,自学笔记,c#,开发语言,microsoft文章来源地址https://www.toymoban.com/news/detail-546852.html

到了这里,关于C#(三十一)之自定义事件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Django笔记三十一之全局异常处理

    本文首发于公众号:Hunter后端 原文链接:Django笔记三十一之全局异常处理 这一篇笔记介绍 Django 的全局异常处理。 当我们在处理一个 request 请求时,会尽可能的对接口数据的格式,内部调用的函数做一些异常处理,但可能还是会有一些意想不到的漏网之鱼,造成程序的异常

    2023年04月26日
    浏览(36)
  • UNIX网络编程卷一 学习笔记 第三十一章 流

    在大多数源自SVR 4的内核中,X/Open传输接口(X/Open Transport Interface,XTI,是独立于套接字API的另一个网络编程API)和网络协议通常就像终端IO系统那样也使用流系统(STREAMS system)实现。 我们将使用传输提供者接口(Transport Provider Interface,TPI)开发一个简单的TCP客户程序,TP

    2024年02月09日
    浏览(55)
  • 自学C#,要懂得善用MSDN

    很多初学者学习编程,都会通过看别人写的教程、或者录制的视频,来学习。 这是一个非常好的途径,因为这个是非常高效的。 但是这样,存在两个问题: 1、 教程不够全面 :任何再好的教程,都无法囊括所有的知识点,更多是讲解部分精髓而已; 2、 无法掌握学习方法

    2023年04月25日
    浏览(27)
  • 【C#进阶】C# 事件

    序号 系列文章 15 【C#进阶】C# 属性 16 【C#进阶】C# 索引器 17 【C#进阶】C# 委托 🌍 hello大家好啊,我是哈桑。本文为大家介绍 C# 中的事件。 事件 本质上来讲是一种特殊的多播委托 1 ,只能从声明它的类中进行调用。事件通常用于表示用户操作,例如单击按钮或图形用户界面

    2024年02月07日
    浏览(29)
  • 不就业,纯兴趣,应该自学C#还是JAVA?

    在开始前我有一些资料,是我根据网友给的问题精心整理了一份「JAVA的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!1.编程语言大部分是相通的,如果已经有java基础或者学习起来更快一些建议可以重新温习j

    2024年01月25日
    浏览(32)
  • 学习笔记三十一:k8s安全管理:认证、授权、准入控制概述SA介绍

    认证基本介绍:kubernetes主要通过APIserver对外提供服务,那么就需要对访问apiserver的用户做认证,如果任何人都能访问apiserver,那么就可以随意在k8s集群部署资源,这是非常危险的,也容易被黑客攻击渗透,所以需要我们对访问k8s系统的apiserver的用户进行认证,确保是合法的符

    2024年02月06日
    浏览(31)
  • 编程小白的自学笔记十一(python爬虫入门三Selenium的使用+实例详解)

    编程小白的自学笔记十(python爬虫入门二+实例代码详解 编程小白的自学笔记九(python爬虫入门+代码详解)  编程小白的自学笔记八(python中的多线程)  编程小白的自学笔记七(python中类的继承)  目录 系列文章目录 文章目录 前言 一、Selenium是什么 二、安装Selenium  三、

    2024年02月16日
    浏览(38)
  • c# 事件与委托

    //在C#中, 事件是一种特殊的委托 ,它允许对象通知其他对象发生了某个特定的事件。 //事件通常用于GUI应用程序中,例如当用户单击按钮时,按钮控件会引发Click事件, //然后其他对象可以订阅该事件并执行相应的操作。 //以下是一个简单的示例,演示如何在C#中使用事件和

    2024年02月06日
    浏览(29)
  • C#全局监听键盘事件

    C#如何获取键盘和鼠标处于空闲状态下的时间  可以通过windows api 函数 GetLastInputInfo或者全局钩子HOOK来实现 用 GetLastInputInfo 写(键鼠空闲15分钟自动弹出一个页面) 新建windows 应用程序项目 用HOOK钩子来实现 创建钩子类 调用 方法

    2024年02月11日
    浏览(30)
  • c#事件(event)

    C#中的事件是一种特殊的委托,它用于实现观察者模式,允许对象在特定事件发生时通知其他对象。 以下是使用C#事件的示例: 首先,定义一个包含事件的类: 在上面的代码中,我们定义了一个EventPublisher类,其中包含一个名为MyEvent的事件。该事件基于EventHandler委托类型,它

    2024年02月10日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包