委托和事件

介绍
委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。

笔者呢也是一个菜鸟,有什么表达不清楚的别介意。

委托和事件的声明及使用:

		public delegate void UserDelegate();
        //有参数的委托声明,参数个数好像是没有限制的
        public delegate void UserDelegateInt(int x);

        public static event UserDelegate userEvent;
        public static event UserDelegateInt userEventInt;

        static void Main(string[] args)
        {
            {
                userEvent += () => { MessageBox.Show("userEvent"); };
                userEventInt += (int i) => { MessageBox.Show($"userEventInt,IntParameter:{i}"); };
                userEvent.Invoke();
                userEventInt.Invoke(20);
            }
            Console.ReadLine();

        }

这样我们的委托就可以使用起来了;

大家有没有发现其实我们的event就是delegate的一个实例对象,
我们创建的event类型都是上面声明的delegate;

但是上面这种写法微软已经不建议我们去使用了,微软已经替我们封装好了无返回参数委托Action和有返回参数Func

public static event Action userActionEvent;
public static event Action<int> userActionEventInt;
//返回一个String类型的值
public static event Func<string> userFuncEvent;
//传入一个Int类型的值,返回一个String类型的值
public static event Func<int,string> userFuncEventInt;

使用方法和一开始介绍的还是一样的;

多播委托
这个最简单的理解方法就是一个委托触发多个方法

userEvent +=  () => { MessageBox.Show("userEvent1"); };
userEvent +=  () => { MessageBox.Show("userEvent2"); };
userEvent +=  () => { MessageBox.Show("userEvent3"); };
userEvent +=  () => { MessageBox.Show("userEvent4"); };
userEvent +=  () => { MessageBox.Show("userEvent5"); };
userEvent +=  () => { MessageBox.Show("userEvent6"); };
userEventInt.Invoke();//一个Invoke执行多个方法
//删除,像笔者上面写的应该是无法删除的,只能重置userEvent
userEvent  -= action;
//这里的规则是从后往前检索,检索到匹配的第一个就删除并停止;

作者因为水平有限,就只能介绍到这里,顺便给大家一个Demo玩一下
里面有个简单的特性、扩展方法、委托事件的触发
百度网盘:https://pan.baidu.com/s/1As0BG5ezWAFwy4MU6EzJkg
提取码:pa0t

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值