对委托与事件的深入理解

一、委托的理解

委托是一种类型(与枚举是一样的):特殊的地方是它指向一个方法

二、委托的使用场景:将一个方法抽象出来作为参数传递

class Program
{
static void Main(string[] args)
{
//MyDelegate md = (s) => { Console.WriteLine(s); Console.ReadKey(); };//lamda expression
//md += Fun1;
//md("Hello Delegate!");

string[] strArry = { "aa","bb","cc"};
ArryProcess(strArry, (s) => { return s + "*"; });//传入委托对数组中的值进行处理
Console.ReadKey();
}

static void ArryProcess(string[] strArry,StrProcessDele dele)
{
for (int i = 0; i < strArry.Length; i++)
{
strArry[i] = dele(strArry[i]);
}
}

static void Fun1(string s)
{
Console.WriteLine(s+"1111");
Console.ReadKey();
}
}

delegate void MyDelegate (string str);

delegate string StrProcessDele(string str);

三、委托的特性

一个委托对象可以指向多个方法=》委托的组合

按顺序执行注册它的方法,一般只用于事件中。

四、事件的本质理解

实现对一件事情发生的监听:(底层实现)

//声明一个委托类型
delegate void OnCount10(int i);

class Program
{
static void Main(string[] args)
{
Count count = new Count();
count._onCount10 = onCount10;
count.Next();
Console.ReadKey();
}

//在得到整数10的时候就会执行这个函数---》调用的人并不知道是怎么实现的,也不知道这个i是怎么传过来的
static void onCount10(int i)
{
Console.WriteLine("10的倍数:" + i);
}
}

class Count
{
public OnCount10 _onCount10;
private int i = 0;
public void Next()
{
while (true)
{
i++;
if (i % 10 == 0)
{
//到达10的整数的时候将这个数传出去,通知事件
_onCount10(i);//具体调用的函数,设计Count类的人并不知道---->解耦的思想
}
}
}
}

注:利用+=的方式注册多个委托响应函数

猜你喜欢

转载自www.cnblogs.com/francis-ray/p/10156861.html
今日推荐