首页 > 其他分享 >.net事件(做一个简单的记录)

.net事件(做一个简单的记录)

时间:2024-05-01 19:00:32浏览次数:21  
标签:触发 记录 EventPara eventPara 事件 using net public

描述(做一个简单的记录):
       事件(event)的本质是一个委托;(声明一个事件: public event TestDelegate eventTest;)
    委托(delegate)可以理解为一个符合某种签名的方法类型;比如:TestDelegate委托的返回数据类型为string,参数为 int和EventPara,而TestI方法的参数和返回类型和TestDelegate一致,则可以把TestI方法赋值给委托tI;
       注册事件:我在构造函数的时候注册这个事件(eventTest += delTest;)并且把触发这个事件的参数也传进来(_eventPara = e;);
       触发事件:当给Number这个字段赋值时触发事件(eventTest(_number, _eventPara); ),事件被触发后TestI这个方法将被执行;

      (如果此文档对你有帮助,欢迎点赞加关注,也欢迎评论互相交流)

代码如下(此代码可以直接运行,本人在vs2022运行):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml.Serialization;
using Ttest;

namespace _SJ.Test
{
    internal class Program
    {
        static void Main(string[] args)
        {
            EventPara eventPara_zs = new EventPara();
            eventPara_zs.Age = 18;
            eventPara_zs.Name = "张三";

            TestDelegate tI = TestI;
            EventTest test = new EventTest(tI, eventPara_zs);
            for (int i = 1; i < 10; i++)
            {
                test.Number = i;//模拟触发一个事件;  每赋值一个值,触发一个事件
            }
            Console.WriteLine( "结束");
            Console.ReadKey();            
        }

        private static string TestI(int i, EventPara e)
        {
            Console.WriteLine($"触发者:{e.Name}, 触发者的年龄:{e.Age}; 触发次数:" + i.ToString());
            return "触发"+i.ToString();
        }
         
    }

    /// <summary>
    /// 自定义的事件参数
    /// </summary>
    public class EventPara: EventArgs
    {
        public int Age { get; set; }
        public string Name { get; set; }
    }

    //声明委托
    public delegate string TestDelegate(int i, EventPara e);
    public class EventTest
    {
        /// <summary>
        /// 声明事件
        /// </summary>
        public event TestDelegate eventTest;
        /// <summary>
        /// 私有的事件参数
        /// </summary>
        private EventPara _eventPara;
        private int _number;
        public int Number {
            get { return _number; }
            set 
            {
                _number = value;
                eventTest(_number, _eventPara); //触发事件
            }
        }

        /// <summary>
        /// 构造时传递一个委托和事件参数
        /// </summary>
        /// <param name="delTest"></param>
        public EventTest(TestDelegate delTest, EventPara e)
        {
            eventTest += delTest;
            _eventPara = e;
        }
    }
}

  

 

运行后的结果如下:

 

标签:触发,记录,EventPara,eventPara,事件,using,net,public
From: https://www.cnblogs.com/SHa-Jazy/p/18169534

相关文章

  • kube-ovn 默认vpc和默认subnet 主机和容器互通
    默认vpc是ovn-cluster,默认subnet是ovn-default。ovn0ip是100.64.0.0/16网段。同节点容器访问主机主机访问容器跨节点容器访问主机主机访问容器 ......
  • C#的基于.net framework的Dll模块编程(五) - 编程手把手系列文章
          这次继续这个系列的介绍: 一、使用DLL类库的方法;1)静态类;先引用该类库,然后声明命名空间,然后就能够进行使用了。   2)动态类;先引用该类库,然后声明命名空间,然后能够进行使用了。  3)窗体;只能在Winf......
  • .Net 8.0 下的新RPC,IceRPC之试试的新玩法"打洞"
    作者引言很高兴啊,我们来到了IceRPC之试试的新玩法"打洞",让防火墙哭去吧试试RPCs的新玩法"打洞"比较典型的玩法:RPC数据流从客户端流向服务端,现在来尝试用IceRPC来玩一个新的花样"打洞"。概述对于IceRPC,客户端是发起连接的实体,而服务器是接受连接的实体。建立连接后,......
  • Oracle日志记录模式 - LOGGING、FORCE LOGGING、NOLOGGING模式介绍
    一、日志记录模式(LOGGING、FORCELOGGING、NOLOGGING)内容转载自:https://www.cnblogs.com/tk-bolg/p/12867772.html1.三者的含义LOGGING:当创建一个数据库对象时将记录日志信息到联机重做日志文件。LOGGING实际上是对象的一个属性,用来表示在创建对象时是否记录REDO日志,包括......
  • 记录两个BLE讲得很好的博客(以后不懂直接看)
    前言本来打算总结一下自己对BLE的理解,在啃CoreSpec的时候发现了这俩个博客,讲的深入浅出,还图文并茂。感觉自己应该也写不出来花来,还是不献丑了。参考资料iini:https://home.cnblogs.com/u/iini爱洋葱StephenZhou:https://stephenzhou.blog.csdn.net/?type=blogBluetoothS......
  • kubernetes(k8s)
    应用程序部署的演变过程在部署应用程序的方式上,主要经历了三个时代传统部署互联网早期,会直接将应用程序部署在物理机上优点:简单,不需要其他技术的参与缺点:不能为应用程序定义资源使用边界,很难合理的分配计算资源,而且程序之间容易产生影响虚拟化部署可以在一台物理......
  • 记录一下给win+ubuntu双系统的ubuntu加装机械硬盘作为/home挂载的折腾过程
    由于我的双系统电脑是:1T固态的win11系统盘+4T的机械盘,1T的另一个单独固态作为Ubuntu的系统盘;其中/home大约是900G,跑程序的缘故,有点不太够用,因此,决定给Ubuntu加装一个4T的机械硬盘。经过调研,发现可以将新加装的机械硬盘单独作为/home挂载,这样就做到了数据和系统分离;参考的......
  • 如何使用 Prometheus 监控 Kubernetes 集群的核心组件
    使用Prometheus监控Kubernetes集群的核心组件涉及几个关键步骤。以下是一个基本的流程:1.部署PrometheusOperatorPrometheusOperator是一个Kubernetes自定义资源控制器,用于管理和操作Prometheus集群。通过Helmchart或其他方式在Kubernetes集群中部署Prometheu......
  • .NET 中使用 GaussDB C# ORM
    openGauss(GaussDB)openGauss是一款全面友好开放,携手伙伴共同打造的企业级开源关系型数据库。openGauss采用木兰宽松许可证v2发行,提供面向多核架构的极致性能、全链路的业务、数据安全、基于AI的调优和高效运维的能力。openGauss深度融合华为在数据库领域多年的研发经验连接字......
  • .NET中使用 openGauss C# ORM
    openGauss(GaussDB)openGauss是一款全面友好开放,携手伙伴共同打造的企业级开源关系型数据库。openGauss采用木兰宽松许可证v2发行,提供面向多核架构的极致性能、全链路的业务、数据安全、基于AI的调优和高效运维的能力。openGauss深度融合华为在数据库领域多年的研发经验 连接......