C# 中的委托和事件机制

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

C# 中的委托和事件机制

在C#中,委托和事件是非常重要的概念,用于实现程序中的回调和事件处理。在这里,我们将介绍C#中委托和事件机制的基础知识和用法。

委托是一种类似于C/C++函数指针的概念,它允许将方法作为参数传递到其他方法中,以实现回调函数的功能。委托是一种类型,它可以表示一个或多个方法的引用,并且可以像普通函数一样被调用。

下面是一个简单的示例代码,展示了如何使用委托:

public delegate void MyDelegate(string message);

public class MyClass
{
    public void MyMethod(string message)
    {
        Console.WriteLine(message);
    }
}

public class Program
{
    static void Main(string[] args)
    {
        MyClass obj = new MyClass();
        MyDelegate del = new MyDelegate(obj.MyMethod);

        del("Hello World!");
    }
}

在这个示例代码中,我们定义了一个委托类型 MyDelegate ,并在 MyClass 类中定义了一个方法 MyMethod ,该方法与委托类型 MyDelegate 兼容。在 Program 类中,我们创建了一个 MyClass 对象,并将 MyMethod 方法的引用传递给委托变量 del 。最后,我们通过调用委托变量 del 来调用 MyMethod 方法。

事件是一种特殊的委托,用于向其他对象通知某个发生的事件。事件包含两个主要部分:事件定义和事件处理程序。事件定义是一种特殊的委托类型,用于定义事件的签名。事件处理程序是一个方法,它与事件定义兼容,并在事件发生时被调用。

下面是一个简单的示例代码,展示了如何使用事件:

public class MyEventArgs : EventArgs
{
    public string Message { get; set; }
}

public class MyClass
{
    public event EventHandler<MyEventArgs> MyEvent;

    public void DoSomething()
    {
        MyEventArgs args = new MyEventArgs();
        args.Message = "Hello World!";

        if (MyEvent != null)
        {
            MyEvent(this, args);
        }
    }
}

public class Program
{
    static void Main(string[] args)
    {
        MyClass obj = new MyClass();
        obj.MyEvent += MyEventHandler;
        obj.DoSomething();
    }

    static void MyEventHandler(object sender, MyEventArgs e)
    {
        Console.WriteLine(e.Message);
    }
}

在这个示例代码中,我们定义了一个事件 MyEvent ,并在 MyClass 类中定义了一个方法 DoSomething ,该方法在事件发生时被调用。在 Program 类中,我们创建了一个 MyClass 对象,并将事件处理程序 MyEventHandler 的引用添加到事件中。最后,我们通过调用 DoSomething 方法来触发事件,并在事件处理程序中输出事件的消息。

Unity中的委托和事件机制

在 Unity 中,委托和事件机制同样也是非常常见的编程概念,它们可以用于处理不同的场景,例如处理用户输入、处理游戏状态、处理游戏物体之间的交互等等。

委托是一个代表了一个或多个方法的引用的类型,可以理解为是一个函数指针,用于将方法作为参数传递、返回方法等。Unity 中常用的委托有 Action 和 Func,其中 Action 表示一个无返回值的委托,而 Func 则表示一个具有返回值的委托。

事件是委托的一种特殊形式,它只能用于添加和移除方法的操作。事件由委托类型定义,并且可以使用 C# 的 event 关键字来声明。事件可以用于在特定的场景中触发方法的执行,例如在游戏中当一个特定的条件满足时触发相应的方法。

以下是一个简单的 Unity 中委托和事件机制的示例:

using UnityEngine;
using System;

public class DelegateAndEventExample : MonoBehaviour
{
    // 定义一个代表了一个无参、无返回值方法的委托类型
    public delegate void MyDelegate();

    // 声明一个事件
    public event MyDelegate myEvent;

    // 声明一个方法,用于触发事件
    void TriggerEvent()
    {
        if (myEvent != null)
        {
            myEvent();
        }
    }

    void Start()
    {
        // 给事件添加一个方法
        myEvent += MyEventHandler;

        // 触发事件
        TriggerEvent();
    }

    void MyEventHandler()
    {
        Debug.Log("Event handled.");
    }
}

在上面的示例中,首先定义了一个委托类型 MyDelegate,它代表了一个无参、无返回值的方法。接着声明了一个事件 myEvent,它的类型是 MyDelegate。然后定义了一个方法 TriggerEvent,它用于触发事件。在 Start 方法中,将 MyEventHandler 方法添加到 myEvent 中,并且通过 TriggerEvent 方法触发了事件。当事件触发时,MyEventHandler 方法会被执行。

C#委托发布与订阅

C#委托的发布与订阅是一种常见的事件处理模式,也称为观察者模式。该模式定义了一种对象间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都会得到通知并自动更新。

在C#中,委托可以用来实现事件的发布与订阅。在事件的发布者中定义一个委托类型的事件,订阅者可以通过该事件来注册自己的委托函数,从而在事件触发时得到通知并执行自己的处理逻辑。具体实现过程如下:

  1. 声明一个委托类型,定义事件所需的委托签名。例如:
    public delegate void EventHandler(object sender, EventArgs e);
    
  2. 在发布者类中定义事件,使用上述委托类型作为事件类型。例如:
    public class Publisher
    {
        public event EventHandler EventName;
    }
    
  3. 在发布者类中定义触发事件的方法,通过调用委托实例来触发事件。例如:
    public void TriggerEvent()
    {
        if (EventName != null)
        {
            EventName(this, EventArgs.Empty);
        }
    }
    
  4. 在订阅者类中定义一个委托函数,该函数的签名与事件委托类型一致,用于处理事件。例如:
    public void HandleEvent(object sender, EventArgs e)
    {
        // 处理事件
    }
    
  5. 在订阅者类中通过事件订阅符号“+=”来注册委托函数到事件中。例如:
    Publisher publisher = new Publisher();
    publisher.EventName += HandleEvent;
    
  6. 在需要触发事件的时候,在发布者对象上调用触发事件的方法,订阅者的委托函数会自动执行。例如:
    publisher.TriggerEvent();
    

    这样,当事件触发时,所有注册到事件中的委托函数都会被调用执行,从而完成事件的处理。文章来源地址https://www.toymoban.com/news/detail-420055.html

到了这里,关于C# 中的委托和事件机制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 委托与事件(一)——C#版本

      委托是对 函数的封装 ,可以当作给方法的特征指定一个名称。而事件则是 委托的一种特殊形式 ,当发生有意义的事情时,事件对象处理通知过程。   委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有 完全相同的行为 。   用例子来说明为

    2023年04月09日
    浏览(46)
  • C#委托和事件简单复习

    太久没用了,简单的复习一下 快速过一遍语法使用 1.定义一个委托类型 只需要在声明的前面加上delegate,其他的就跟声明一个方法(函数)类似 2.使用刚刚声明的委托 需要定义一个返回值跟参数与我们刚刚定义的委托一致 3.然后声明一个SayHello类型(委托)的变量 把

    2024年02月14日
    浏览(46)
  • C#学习笔记8:接口、委托、事件

    今日继续我的C#学习之路,今日学习接口、委托、事件,文章从实践出发学习这三个设计理念,并提供完整源码 目录 1、接口(多重继承): 代码: 运行结果: 2、委托(方法的代理/函数指针): 创建控制台程序实现委托: 遇到的报错及解决: 修改后的代码: 运行结果: 3、

    2024年04月15日
    浏览(55)
  • C#学习,委托,事件,泛型,匿名方法

    目录 委托 声明委托 实例化委托 委托的多播 委托的用途 事件 通过事件使用委托 声明事件 泛型 泛型的特性 泛型方法 泛型的委托 匿名方法 编写匿名方法的语法 类似于指针,委托是存有对某个方法的引用的一种引用类型变量,引用可以在运行时被改变。特别用于实现事件和

    2024年02月12日
    浏览(46)
  • C# 事件和委托的区别并说明

    事件是基于委托的,为委托提供了一个发布/订阅机制。可以说事件是一种特殊的委托,他的调用和委托是一样的。 事件的声明 public event 委托类型 事件名称 通常事件的命名以事件名称+Event来命名。如public event delegate NotifyEvent; 事件和委托的区别如下: 事件只能在方法的外部

    2024年02月07日
    浏览(39)
  • C# 一个完整的委托、事件学习示例

    该示例符合委托、事件的定义规则,并且可以帮助大家更好地理解委托和事件的使用! 先定义了一个名为 MyEventArgs 的类,继承自 EventArgs ,它包含一个 Message 属性,用于存储传递的消息。 Publisher 类中添加了一个 protected virtual 的方法 OnMyEvent ,用于触发 MyEvent 事件,并传递

    2024年02月07日
    浏览(42)
  • 【C# Programming】委托和lambda表达式、事件

    目录 一、委托和lambda表达式 1.1 委托概述 1.2 委托类型的声明 1.3 委托的实例化 1.4 委托的内部机制  1.5 Lambda 表达式 1.6 语句lambda 1.7 表达式lambda 1.8 Lambda表达式 1.9 通用的委托 1.10 委托没有结构相等性 1.11 Lambda表达式和匿名方法的内部机制 1.12 外部变量 1.13 外部变量的

    2024年02月06日
    浏览(46)
  • C#学习笔记--数据结构、泛型、委托事件等进阶知识点

    ArrayList 元素类型以Object类型存储,支持增删查改的数组容器。 因而存在装箱拆箱操作,谨慎使用。 ArrayList和数组区别? ArrayList使用不用说明固定长度,数组则需要 数组存储的是指定类型的,ArrayList是Object ArrayList存在装箱拆箱,数组不存在 ArrayList数组长度用Count获取 而数组

    2024年02月08日
    浏览(50)
  • 面试常考:C# 委托(delegate、Action、Func、predicate)和事件

    刚开始工作的时候,觉得委托和事件有些神秘,而当你理解他们之后,也觉得好像没有想象中的那么难,这篇博文算是自己对委托和事件的一次梳理和总结。 C#中的委托,相当于C++中的指针函数,但委托是面向对象的,是安全的,是一个特殊的类,当然他也是引用类型,委托

    2024年02月16日
    浏览(46)
  • 每个.NET开发都应掌握的C#委托事件知识点

    上篇文章讲述了C#接口的知识点,本文将介绍C#委托事件知识点。C#作为.NET开发的核心语言之一,提供了丰富的特性来支持面向对象编程和事件驱动的模型。其中,委托和事件是C#中不可或缺的关键概念,每个.NET开发者都应该深入理解它们的作用和用法。委托和事件密不可分,

    2024年02月12日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包