[笔记]关于 Event Delegate Action Func EventHandler

这个帖子不含任何有益内容,仅作为笔记使用,建议看其他大佬的文章

Delegate: 最通用的委托类型,可以引用任何具有相匹配签名的方法。它提供了最大的灵活性,适        用于需要传递任意方法的情况

Action: 用于表示没有参数和返回值的方法的委托。它提供了一种简洁的方式来表示无参数无返            回值的操作,通常用于触发事件或执行简单的操作。

Func: 用于表示具有返回值的方法的委托。与Action不同,Func允许指定返回类型,并支持具有一        个或多个参数的方法。它常用于需要进行计算、转换等操作并返回结果的情况。

EventHandler: 专门用于处理事件的委托类型。它接收两个参数:事件的发起者和事件参数,用于          处理事件的方法。

委托类型(Event、Action、Func、EventHandler)都是基于委托(Delegate)的不同变体实现

  • Event: 本质上是一种特殊的多播委托(Multicast Delegate),用于触发和订阅事件。它封装了委托的概念,并提供了更强大的事件处理机制。

  • Action: Action 是委托的一种封装,它专门用于表示没有参数和返回值的方法的委托。虽然它的底层实现仍然是委托,但它提供了更清晰、更简洁的语法来表示这种类型的方法。

  • Func: Func 也是委托的一种封装,它用于表示具有返回值的方法的委托。与 Action 类似,它提供了一种简洁的方式来表示具有返回值的方法。

  • EventHandler: 作为.NET Framework 中事件处理的标准委托类型,EventHandler 也是委托的一种特殊形式。它专门用于处理事件,并规定了接收两个参数(事件的发起者和事件参数)的委托签名。

关于EventHandler

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

namespace TesT2024v2v1
{
     class Class1//这个是EventHandler都会传入的一个参数
    {
        public string C1 = "测试";
    }

    // 主程序入口
     class A
    {
                                           //EventHandler类似于Action  但不同的是它挂载的方法都会传入两个参数,第一个
                                           //一般是调用类的对象,令一个一般是特定的参数对象里面装着一堆通用的数据

        public static event EventHandler<Class1> XXXX;   //EventArgs.Empty  如果不像传入参数就吧这里的<Class1删去>
                                                         //Invoke里的YYYY改成EventArgs.Empty
        public static Class1 YYYY;                       //A1方法里的Class b 改成 System.EventArgs e

        static void Main(string[] args)
        {
            YYYY = new Class1();
            XXXX += A1;//这里加入一个方法(加入里面的方法都要满足EventHandler的参数列表)

            XXXX?.Invoke(null,YYYY);//调用XXXX里的方法
        }

        public static void A1(object a,Class1 b ) 
        {
            Console.WriteLine(b.C1);
        }


    }



}

关于 Delegate Action Func  

using System;
using System.Diagnostics;



public class Player
{
    public string Name = "你好";

    delegate void A1(int i);//声明了一个会接受一个int的委托的类型注意是类型,不是变量

    delegate void A2();

    static void Main()
    {
        AAA aAA = new AAA();

        A1 a1 = P1;//输入了一个P1方法,注意参数P1的参数列表和A1是一样的,此时它仍是一个变量
        a1(666);//调用委托

        //在 C# 中,Action、Func 和 delegate 都是委托(delegate)的不同形式。
        //Delegate(委托)是一种类型,用于引用方法。它允许将方法作为参数传递给其他方法,或者存储对方法的引用,且参数和返回值是固定的。
        //Action 是一个泛型委托,它表示一个没有返回值的方法。它可以接受0到16个输入参数,且参数和返回值可变。
        //Func 也是一个泛型委托,它表示一个具有返回值的方法。它可以接受0到16个输入参数,且参数和返回值可变,最后一个参数表示方法的返回值。
        Action<int> AC2 = P2;
        AC2(777);

        Func<int, string> AC3 = P3;
        Console.WriteLine(AC3(666));


        //委托在仅仅只是引用一个方法,这意味着委托运行时仍是在原来的类内运行的
        A2 a2 = aAA.A1;
        a2();
    }

    public static void P1(int i)
    {
        Console.WriteLine("这里是P1方法" + i);
    }

    public static void P2(int A)
    {
        Console.WriteLine("这里是P2接收了" + A);
    }

    public static String P3(int a)
    {
        return "这里是p3接收了" + a.ToString();
    }

}

public class AAA
{
    public String name = "这里是AAA的变量";
    public void A1()
    {
        Console.WriteLine("这里是A1方法" + name);
    }

}

/
/

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值