C#学习笔记----事件 自定义事件

本文深入探讨了C#中的事件机制,包括事件的基本概念、如何定义和使用自定义事件,以及通过示例代码展示了事件的订阅与触发过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事件的含义:

事件类似于异常,因为它们都是有对象引发(抛出),我们可以提供代码来处理事件。

事件需要订阅。订阅一个事件的含义是提供代码,在事件发生时执行这些代码,它们称为事件处理程序

单个事件可供多个处理程序订阅,在该事件发生时,这些处理程序都会被调用,其中包括引发该事件的对象所在类中的事件处理程序,但事件处理程序也可能在其他类中。

事件处理程序本身都是简单的方法。对事件处理方法的唯一限制是它必须匹配于事件所要求的返回类型和参数。这个限制是事件定义的一部分,由一个委托指定。

要处理事件,需要提供一个事件处理方法来订阅事件,该方法的返回类型和参数应该匹配事件指定的委托。

示例简单的计时器对象引发事件,调用一个处理方法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;

namespace Ch13Ex01
{
    class Program
    {
        static int counter = 0;

        static string displayString =
                             "This string will appear one letter at a time. ";

        static void Main(string[] args)
        {
            Timer myTimer = new Timer(100);
            myTimer.Elapsed +=/* WriteChar;*/ new ElapsedEventHandler(WriteChar);//关联事件和事件处理程序
            myTimer.Start();//启动计时器
            Console.ReadKey();
        }

        static void WriteChar(object source, ElapsedEventArgs e)//事件处理程序
        {
            Console.Write(displayString[counter++ % displayString.Length]);
        }
    }
}

自定义事件:

在定义事件前,必须先定义一个委托类型,以用于该事件,这个委托类型指定了事件处理方法必须拥有的返回类型和参数


给事件命名,在声明时,使用event关键字,并指定要使用的委托类型。以这种方式声明了事件后,就可以引发它,方法是按名称来调用它,就好像它是一个其返回类型和参数是由委托指定的方法一样。


自定义事件示例:(此例是C#入门经典第五版的源码,我稍加自己理解后的注释,菜鸟入门,大神绕道)

Program.cs文件

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

namespace Ch13Ex02
{
    class Program
    {
        static void Main(string[] args)
        {
            Connection myConnection = new Connection();
            Display myDisplay = new Display();
            myConnection.MessageArrived/*事件*/ +=
                    new EventHandler/*MessageHandler*/(myDisplay.DisplayMessage)/*使用委托关联事件处理程序DisplayMessage*/;
            myConnection.Connect();
            Console.ReadKey();
        }
    }
}



Connection.cs文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;

namespace Ch13Ex02
{
    public delegate void /*MessageHandler*/EventHandler/*使用系统定义的标准委托类型*/(string messageText);//定义委托变量

    public class Connection
    {
        public event /*MessageHandler*/EventHandler MessageArrived;//声明事件

        private Timer pollTimer;

        public Connection()
        {
            pollTimer = new Timer(100);
            pollTimer.Elapsed/*事件*/ += new ElapsedEventHandler(CheckForMessage);//关联事件和事件处理程序
        }

        public void Connect()
        {
            pollTimer.Start();//启动计时器,定时引发事件
        }

        public void Disconnect()
        {
            pollTimer.Stop();
        }

        private static Random random = new Random();

        private void CheckForMessage(object source, ElapsedEventArgs e)
        {
            Console.WriteLine("Checking for new messages.");
            if ((random.Next(9) == 0) && (MessageArrived != null))//MessageArrived != null也使用了委托,其含义是事件是否有事件处理程序关联
            {
                MessageArrived("Hello Mum!");//引发事件,即是调用事件,调用事件的类型和委托声明的类型相同
            }
        }
    }
}



Display.cs文件

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

namespace Ch13Ex02
{
    public class Display
    {
        public void DisplayMessage(string message)//事件处理程序
        {
            Console.WriteLine("Message arrived: {0}", message);
        }
    }
}



内容概要:该PPT详细介绍了企业架构设计的方法论,涵盖业务架构、数据架构、应用架构和技术架构四大核心模块。首先分析了企业架构现状,包括业务、数据、应用和技术四大架构的内容和关系,明确了企业架构设计的重要性。接着,阐述了新版企业架构总体框架(CSG-EAF 2.0)的形成过程,强调其融合了传统架构设计(TOGAF)和领域驱动设计(DDD)的优势,以适应数字化转型需求。业务架构部分通过梳理企业级和专业级价值流,细化业务能力、流程和对象,确保业务战略的有效落地。数据架构部分则遵循五大原则,确保数据的准确、一致和高效使用。应用架构方面,提出了分层解耦和服务化的设计原则,以提高灵活性和响应速度。最后,技术架构部分围绕技术框架、组件、平台和部署节点进行了详细设计,确保技术架构的稳定性和扩展性。 适合人群:适用于具有一定企业架构设计经验的IT架构师、项目经理和业务分析师,特别是那些希望深入了解如何将企业架构设计与数字化转型相结合的专业人士。 使用场景及目标:①帮助企业和组织梳理业务流程,优化业务能力,实现战略目标;②指导数据管理和应用开发,确保数据的一致性和应用的高效性;③为技术选型和系统部署提供科学依据,确保技术架构的稳定性和扩展性。 阅读建议:此资源内容详尽,涵盖企业架构设计的各个方面。建议读者在学习过程中,结合实际案例进行理解和实践,重点关注各架构模块之间的关联和协同,以便更好地应用于实际工作中。
资 源 简 介 独立分量分析(Independent Component Analysis,简称ICA)是近二十年来逐渐发展起来的一种盲信号分离方法。它是一种统计方法,其目的是从由传感器收集到的混合信号中分离相互独立的源信号,使得这些分离出来的源信号之间尽可能独立。它在语音识别、电信和医学信号处理等信号处理方面有着广泛的应用,目前已成为盲信号处理,人工神经网络等研究领域中的一个研究热点。本文简要的阐述了ICA的发展、应用和现状,详细地论述了ICA的原理及实现过程,系统地介绍了目前几种主要ICA算法以及它们之间的内在联系, 详 情 说 明 独立分量分析(Independent Component Analysis,简称ICA)是近二十年来逐渐发展起来的一种盲信号分离方法。它是一种统计方法,其目的是从由传感器收集到的混合信号中分离相互独立的源信号,使得这些分离出来的源信号之间尽可能独立。它在语音识别、电信和医学信号处理等信号处理方面有着广泛的应用,目前已成为盲信号处理,人工神经网络等研究领域中的一个研究热点。 本文简要的阐述了ICA的发展、应用和现状,详细地论述了ICA的原理及实现过程,系统地介绍了目前几种主要ICA算法以及它们之间的内在联系,在此基础上重点分析了一种快速ICA实现算法一FastICA。物质的非线性荧光谱信号可以看成是由多个相互独立的源信号组合成的混合信号,而这些独立的源信号可以看成是光谱的特征信号。为了更好的了解光谱信号的特征,本文利用独立分量分析的思想和方法,提出了利用FastICA算法提取光谱信号的特征的方案,并进行了详细的仿真实验。 此外,我们还进行了进一步的研究,探索了其他可能的ICA应用领域,如音乐信号处理、图像处理以及金融数据分析等。通过在这些领域中的实验和应用,我们发现ICA在提取信号特征、降噪和信号分离等方面具有广泛的潜力和应用前景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值