当前位置:首页 > 科技  > 软件

聊聊C#中的委托与事件

来源: 责编: 时间:2024-05-16 09:05:29 212观看
导读在C#编程中,委托(Delegate)和事件(Event)是两个非常重要的概念,它们允许我们实现事件驱动编程,是观察者设计模式的一种实现。委托用于定义方法的签名,并允许将方法作为参数传递或赋值给变量,而事件则用于提供类或对象状态变化

在C#编程中,委托(Delegate)和事件(Event)是两个非常重要的概念,它们允许我们实现事件驱动编程,是观察者设计模式的一种实现。委托用于定义方法的签名,并允许将方法作为参数传递或赋值给变量,而事件则用于提供类或对象状态变化的通知。ZS028资讯网——每日最新资讯28at.com

ZS028资讯网——每日最新资讯28at.com

一、委托

委托是一种类型,它安全地封装了方法的签名和定义,可以被当做参数来传递。委托的声明决定了可以引用哪种方法,即参数类型和返回值类型。ZS028资讯网——每日最新资讯28at.com

下面是一个简单的委托示例:ZS028资讯网——每日最新资讯28at.com

using System;// 定义一个委托类型,它接受两个int参数,并返回int值public delegate int BinaryOp(int x, int y);class Program{    // 一个匹配BinaryOp委托的方法    static int Add(int a, int b)    {        return a + b;    }    static void Main()    {        // 创建BinaryOp委托实例,并关联Add方法        BinaryOp binaryOp = new BinaryOp(Add);                // 使用委托调用关联的方法        int result = binaryOp(10, 5);        Console.WriteLine(result); // 输出15    }}

在这个例子中,我们定义了一个名为BinaryOp的委托,它可以接受两个int参数并返回一个int值。然后我们创建了一个Add方法,其签名与BinaryOp委托相匹配。在Main方法中,我们创建了一个BinaryOp的实例,并将其与Add方法相关联。最后,我们通过委托调用了Add方法,并输出了结果。ZS028资讯网——每日最新资讯28at.com

二、事件

事件是基于委托实现的,为委托实例提供了一层封装,增加了安全性和封装性。事件使用event关键字进行声明,并且只能在定义事件的类内部进行触发,而不能由外部类触发。这样做的好处是防止了外部类滥用事件,增加了代码的安全性。ZS028资讯网——每日最新资讯28at.com

下面是一个使用事件的基础示例:ZS028资讯网——每日最新资讯28at.com

using System;// 定义一个委托类型public delegate void MyEventHandler(object source, EventArgs args);class MyClass{    // 定义一个事件基于上面的委托类型    public event MyEventHandler SomethingHappened;    public void DoSomething()    {        // 执行某些操作...        Console.WriteLine("Doing something...");                // 触发事件        OnSomethingHappened();    }    // 受保护的方法,用于触发事件    protected virtual void OnSomethingHappened()    {        // 如果有订阅者,则触发事件        SomethingHappened?.Invoke(this, EventArgs.Empty);    }}class Program{    static void Main()    {        MyClass myClass = new MyClass();        // 订阅事件        myClass.SomethingHappened += MyClass_SomethingHappened;        myClass.DoSomething(); // 执行操作并触发事件    }    // 事件处理程序方法    private static void MyClass_SomethingHappened(object sender, EventArgs e)    {        Console.WriteLine("Something happened in MyClass!");    }}

在这个例子中,我们定义了一个名为MyEventHandler的委托和一个名为MyClass的类。在MyClass中,我们声明了一个名为SomethingHappened的事件,并在DoSomething方法中触发了该事件。在Main方法中,我们创建了MyClass的一个实例,并订阅了SomethingHappened事件。当DoSomething方法被调用时,它会触发事件,并调用所有订阅了该事件的事件处理程序。ZS028资讯网——每日最新资讯28at.com

三、总结

委托和事件是C#中实现事件驱动编程的重要机制。委托允许我们定义可以引用方法的类型,并可以将方法作为参数传递或赋值给变量。事件为委托实例提供了一层封装,增加了代码的安全性和封装性。通过委托和事件,我们可以实现松耦合的代码设计,使得不同的组件可以相互通信而无需紧密地绑定在一起。ZS028资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-88332-0.html聊聊C#中的委托与事件

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 2024 Vue 联邦大会,全明星阵容!探讨 Vue 的未来和问题

下一篇: 如何用 Java 高效的生成随机数?Random 的原理是什么?

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • 6月安卓手机性能榜:vivo/iQOO霸占旗舰排行榜前三

    2023年上半年已经正式过去了,我们也迎来了安兔兔V10版本,在新的骁龙8Gen3和天玑9300发布之前,性能榜的榜单大体会以骁龙8Gen2和天玑9200+为主,至于那颗3.36GHz的骁龙8Gen2领先
  • 消息称迪士尼要拍真人版《魔发奇缘》:女主可能也找黑人演员

    8月5日消息,迪士尼确实有点忙,忙着将不少动画改成真人版,继《美人鱼》后,真人版《白雪公主》、《魔发奇缘》也在路上了。据外媒消息称,迪士尼将打造真人版
  • 摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 不容错过的MSBuild技巧,必备用法详解和实践指南

    一、MSBuild简介MSBuild是一种基于XML的构建引擎,用于在.NET Framework和.NET Core应用程序中自动化构建过程。它是Visual Studio的构建引擎,可在命令行或其他构建工具中使用
  • ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大“烤”之下的除了众生,还有各大企业发布的ESG报告。ESG是“环境保
  • 携众多高端产品亮相ChinaJoy,小米带来一场科技与人文的视听盛宴

    7月28日,全球数字娱乐领域最具知名度与影响力的年度盛会中国国际数码互动娱乐展览会(简称ChinaJoy)在上海新国际博览中心盛大开幕。作为全球领先的科
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • iQOO Neo8 Pro即将开售:到手价3099元起 安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
Top