C# 事件与委托

一、委托

1、什么是委托

 通俗易懂的理解:委托是函数(方法)的容器,可以理解为表示函数(方法)的变量类型,用来储存、传递函数(方法)。委托的本质是一个类,用来定义函数(方法)的类型(返回值和参数的类型)。不同的函数(方法)必须对应和各自"格式"一致的委托。

形象比喻:int num; num 可以当作参数,在函数中进行传递,

那么:委托 就是函数的类型,此时函数被当作参数,可以在其他函数中当作参数进行传递。

因为函数本身存在常规变量的参数,所以当函数作为参数传递的时候,一定要让函数申明格式和委托的定义格式参数和返回值上面要一 一对应。

2、委托的定义

语法糖:访问修饰符  delegate  返回值  委托名(参数列表);

如: public delegate void DelFun(string name);

定义了一个访问修饰符为public,无返回值,参数类型为string, 名字为DelFun的委托。

如:public delegate int DelFun2(int num);

定义了一个访问修饰符为public,返回值为int,参数类型为int,名字为DelFun2的委托。

委托一般定义在namespace(命名空间)和class(类)语句块中。

记忆法则:函数申明前面,加一个关键字delegate 则就是委托的定义。

3、委托的使用

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public delegate void MyFun();
public delegate int MyFun2(int value);

// 委托常用在:
//1 作为类的成员
//2 作为函数的参数
class Test 
{
    // 作为类的成员
    public MyFun fun;
    public MyFun2 fun2;

    // 委托作为函数的参数
    public void TestFun(MyFun fun, MyFun2 fun2) 
    {
        // 先处理一些别的逻辑 当这些逻辑处理完了,在执行传入的函数
        // 比如:
        int i = 1;
        i *= 2;
        i += 2;
        // 执行传进来的回调函数
        fun()
C#中,事件委托是密切相关的概念。委托是一种类型,它封装了一个或多个方法,并允许将这些方法作为参数传递给其他方法。事件则是一种特殊的委托,它允许程序员在对象发生特定的操作或状态改变时通知其他对象。 在C#中,可以使用delegate关键字定义委托类型。例如: ``` public delegate void MyDelegate(int x, int y); ``` 这个代码定义了一个名为MyDelegate的委托类型,它封装了一个具有两个int参数的方法。可以使用这个委托类型来声明变量,例如: ``` MyDelegate myDelegate = new MyDelegate(MyMethod); ``` 这个代码创建了一个名为myDelegate的变量,它引用了一个具有两个int参数的方法MyMethod。 事件通常使用EventHandler委托类型作为事件处理程序的签名。例如: ``` public class MyClass { public event EventHandler MyEvent; } ``` 这个代码定义了一个名为MyEvent的事件,它使用EventHandler委托类型作为事件处理程序的签名。可以使用“+=”运算符将事件处理程序添加到事件的处理程序列表中。例如: ``` MyClass myObject = new MyClass(); myObject.MyEvent += new EventHandler(MyEventHandler); ``` 这个代码将MyEventHandler方法添加到MyClass对象的MyEvent事件的处理程序列表中。 需要注意的是,事件只能在事件发布者类中声明和触发,而事件处理程序则可以在事件订阅者类中定义。事件的订阅者可以使用委托实例来订阅事件,并在事件发生时执行相应的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值