c#中的委托和事件

     最近又看了下.NEt之美,本人从事.Net开发,平时空闲都是去琢磨前端的。后端的基础就不扎实了。

     什么是委托?

  我的最新理解。A叫B去办理一件事A1,那么A说:我委托A去B办理A1这个事了,后面B具体怎么办理我不管了,总归你要给我办理这事的回复给我就行了。这时候有C也要叫B去办理一件事C1,C的要求也一样也是委托B了。

  那么问题来了:

  为什么A和C都委托B去办理?

  这时候B说:我在专门处理某一方面事情的。而A和C给我的事情都是这方面的,就可以委托给我了。

    中文对于委托:把事情托付给别人或别的机构。

  那么委托在.net里面是怎么处理的。书中给出了很好的例子大家可以看看。书中以打招呼的形式,委托B,取名:GreetingDelegate,定义:public delegate void GreetingDelegate(string name);我们可以理解这个GreetingDelegate相当于string了,当然委托没有那么简单,那么你要委托我的事情必须是同一件,这件事情就是是属于这件事的相当于委托的定义了:GreetingDelegate(string name),不属于我的事的事情我是不会干的。具体代码如下:

using System;
using System.Collections.Generic;
using System.Text;
namespace Delegate {
// 定义委托,它定义了可以代表的方法的类型
public delegate void GreetingDelegate(string name);
class Program {
private static void EnglishGreeting(string name) {
第3章 C#中的委托和事件  ◆ 39
Console.WriteLine("Morning, " + name);
}
private static void ChineseGreeting(string name) {
Console.WriteLine(" 早上好 , " + name);
}
// 注意此方法,它接受一个 GreetingDelegate 类型的方法作为参数
private static void GreetPeople(string name, GreetingDelegate MakeGreeting) {
MakeGreeting(name);
}
static void Main(string[] args) {
GreetPeople("Jimmy Zhang", EnglishGreeting);
GreetPeople(" 张子阳 ", ChineseGreeting);
Console.ReadKey();
}
}
}
输出如下:
Morning, Jimmy Zhang
早上好 , 张子阳

public delegate void GreetingDelegate(string name);
class Program
{
private static void EnglishGreeting(string name) {
Console.WriteLine("Good Morning,"+name);
}
private static void ChineseGreeting(string name)
{
Console.WriteLine("早上好,"+name);
}
private static void GreetPeople(string name, GreetingDelegate MakeGreeting){
MakeGreeting(name);
}
}

这个是简单的例子,具体看书吧。

总结下吧,委托就是一个事,这个事是我们自己定义的一些规则,定义好了之后,相当于函数当中参数来传,当然是有规则的。那么如果我们要用这个委托,那么就按照他的规则去写一些函数,按照他的规则来传,就是事情,就是这么简单。

现在来看看所谓的事件吧。

为什么会有事件?说白了就是为了安全起见。A委托B去办事,C委托B去办事,那么如果B有个老大Boss说如果有D来委托你办事,就不要给D办事,不管什么事情。为什么Boss这样说,因为怕D委托的事尽管B可以办但是为违反条例的,B不知道就去把了,那么为了知道这个事情,那么BOOS就要制定一个规则,这样子B去办事才会安全,那么这个就是事件了。而这个事件,最终是给B要求的。那么对于B来说就是:public event GreetingDelegate  delegateEvent;而这个是在Boss下的。这个时候D来找B办事,那么B会对D说,您的事情不能委托我办理,需要你自己去办理或者您去问问Boss吧,他如果说可以就可以。那么D去问Boos了,最终通过了,那么B就可以去办理了。可以这么说了:D委托B去办理,那么D要先经过Boss的同意不能直接办理。那么不是很安全了。

  Boos  boos=new Boos();//Boos说了不能直接对Dosomething调用,这里面delegateEvent就是B了

  boos.delegateEvent+=new GreetingDelegate(D);//D去找Boos

  boos.Dosomething();//boos允许了而不能像boos.delegateEvent(D);直接去调用了。

  看看很好玩的一件事。

  

原文地址:https://www.cnblogs.com/jristy/p/4618731.html