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

聊聊C#中的委托与事件

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

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

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

一、委托

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

下面是一个简单的委托示例:0F428资讯网——每日最新资讯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方法,并输出了结果。0F428资讯网——每日最新资讯28at.com

二、事件

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

下面是一个使用事件的基础示例:0F428资讯网——每日最新资讯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方法被调用时,它会触发事件,并调用所有订阅了该事件的事件处理程序。0F428资讯网——每日最新资讯28at.com

三、总结

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

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

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

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

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

标签:
  • 热门焦点
  • K60 Pro官方停产 第三方瞬间涨价

    虽然没有官方宣布,但Redmi的一些高管也已经透露了,Redmi K60 Pro已经停产且不会补货,这一切都是为了即将到来的K60 Ultra铺路,属于厂家的正常操作。但有意思的是该机在停产之后
  • 对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 从 Pulsar Client 的原理到它的监控面板

    背景前段时间业务团队偶尔会碰到一些 Pulsar 使用的问题,比如消息阻塞不消费了、生产者消息发送缓慢等各种问题。虽然我们有个监控页面可以根据 topic 维度查看他的发送状态,
  • 这款新兴工具平台,让你的电脑效率翻倍

    随着信息技术的发展,我们获取信息的渠道越来越多,但是处理信息的效率却成为一个瓶颈。于是各种工具应运而生,都在争相解决我们的工作效率问题。今天我要给大家介绍一款效率
  • 认真聊聊东方甄选:如何告别低垂的果实

    来源:山核桃作者:财经无忌爆火一年后,俞敏洪和他的东方甄选依旧是颇受外界关心的“网红”。7月5日至9日,为期5天的东方甄选“甘肃行”首次在自有App内直播,
  • 苹果、三星、惠普等暂停向印度出口笔记本和平板电脑

    集微网消息,据彭博社报道,在8月3日印度突然禁止在没有许可证的情况下向印度进口电脑/平板及显示器等产品后,苹果、三星电子和惠普等大公司暂停向印度
  • 世界人工智能大会国际日开幕式活动在世博展览馆开启

    30日上午,世界人工智能大会国际日开幕式活动在世博展览馆开启,聚集国际城市代表、重量级院士专家、国际创新企业代表,共同打造人工智能交流平台。上海市副市
  • 外交部:美方应停止在网络安全问题上不负责任地指责他国

      中国外交部今天(16日)举行例行记者会。会上,有记者问,美国情报官员称,他们正在阻拦来自中国以及其他国家的黑客获取相关科研成果。 中方对此有何评论?对此
Top