C#小白理解委托、事件

1.委托

我给委托总结了两点,大家可以看看(仅供参考)

  • 委托就是存放方法的数组
  • 委托就是一个方法的类型

下面,我们通过一个很简单的代码片段来认识一下

using System;

namespace MyDelegate
{
    delegate void Say(string name);
    class Program
    {
        public static event Say SayHelloEvent;
        static void Main(string[] args)
        {
            //委托实例名=要传入的方法
            //此时是方法的引用,所以不带(),带()的话是该方法的调用。区分引用和调用
            Say say = SayHello;
            say += SayGoodBye;
            say.Invoke("老王");
            //匿名函数
            Say say1 = delegate (string name)
            {
                Console.WriteLine($"{name},我是匿名函数");
            };
            say1("匿名函数说到:");

            //lamda表达式
            Say say2 = (name) =>
            {
                Console.WriteLine($"{name},我是lamda语句");
            };
            say2("lamda说到:");

            //事件
            SayHelloEvent += Programe_SayHelloEvent;//注册事件
            if (SayHelloEvent != null)
            {
                SayHelloEvent("事件说到:");//调用事件
            }
        }
        public static void Programe_SayHelloEvent(string name)
        {
            Console.WriteLine($"{name},我是事件");
        }
        public static void SayHello(string name)
        {
            Console.WriteLine($"你好:{name}");
        }
        public static void SayGoodBye(string name)
        {
            Console.WriteLine($"再见:{name}");
        }
    }
}

不难看出,我们先声明了一个委托,将其实例化,随后再进行调用。我们在调用的时候,需要注意:用委托类型直接加参数是Invoke(参数)的一个捷径。实等价调用 Invoke()。

 say("老王");
 say.Invoke("老王");

注意:实例化一个委托对象需要用一个方法来实例化,这个方法的返回值类型和参数列表需要和委托保持一致。

2.泛型委托

NET 框架为我们封装了三个泛型委托类,因此大部分情况下我们不必再声明委托,可以拿来直接实例化使用,

这三种泛型委托包括:Func委托、Action委托和Predicate委托。

其中也很好记:

1. Action无返回值的委托
2. Func<>有返回值的委托 注意:该泛型委托最多可以传递16个参数 最后一个是返回值类型

补充:委托链/多播委托
利用 +=运算符 将一组方法放入到一个委托中,当委托运行时,依次的运行其中的方法。但是只能得到最后一个返回值。

3.事件

声明事件之前必须声明该事件的委托类型,声明事件本身
时需要加上关键字event

  delegate void Say(string name);
  public static event Say SayHelloEvent;

上面的代码定义了一个名为 Say的委托和一个名为 SayHelloEvent的事件,该事件在生成的时候会调用委托。

上面代码最后的输出结果是:
在这里插入图片描述
代码很简单,就是为了方便大家理解一下思维,欢迎大家随时指正。

总结:

  • 委托是类型,事件是对象。 事件的内部是用委托实现的
  • 事件内部就是一个private的委托和add、remove两个方法
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值