介绍
委托 和 事件在 .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