ASP.NET---委托和Event

目录

什么是委托?

什么时候用委托?

委托和event


什么是委托?

1.委托是用户自定义的类,它定义了方法的类型。储存的是一系列具有相同参数和返回类型方法的地址列表,调用委托时,此委托列表的所有方法都将被执行。

2.委托简单说就是让别人帮你办件事。委托是C#实现回调函数的一种机制,引入一篇其他博客提到的例子:

例子:我现在是一家公司的老板,公司现在在招聘.NET工程师,我们有一个小姐姐专门负责接受求职者投递的简历,我就告诉这个小姐姐,一旦收到新的简历就转发给我一份。

这个例子里小姐姐要做的工作:给我转发一份简历(回调函数里的操作),就是一个回调函数的作用。一旦有了满足条件(收到了新的简历),小姐姐就会转发给我(触发回调函数)

3.委托的目的是为了请别人帮忙做你干不了的事,而且你暂时还不知道应该请谁来帮忙,

4.委托是一个,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。下面是个很好例子:

例子:应用场景:根据传中文名还是英文名,打不同语言的招呼

namespace Delegate {
     //定义委托,它定义了可以代表的方法的类型
     public delegate void GreetingDelegate(string name);
        class Program {
            //相同参数和返回类型方法的地址列表
           private static void EnglishGreeting(string name) {
               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
早上好, 张子阳

什么时候用委托?

1.观察者模式(一个被监视的对象,一个触发事件)

例如:一个热水器,一旦到达了95度,就会在屏幕上显示提示温度过高提醒用户。

2.使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。

static void Main(string[] args) {
    GreetingDelegate delegate1 = new GreetingDelegate(EnglishGreeting);
    delegate1 += ChineseGreeting;   // 给此委托变量再绑定一个方法

    // 将先后调用 EnglishGreeting 与 ChineseGreeting 方法
    GreetPeople("Jimmy Zhang", delegate1);  
    Console.WriteLine();

    delegate1 -= EnglishGreeting; //取消对EnglishGreeting方法的绑定
    // 将仅调用 ChineseGreeting 
    GreetPeople("张子阳", delegate1); 
    Console.ReadKey();
}
输出为:
Morning, Jimmy Zhang
早上好, Jimmy Zhang
早上好, 张子阳

委托和event

event相当于把委托封装了,如果event前面是public那么就可以对委托进行注册和取消注册,如果是private就不可以进行注册

注册是什么?

delegate1 += ChineseGreeting;  //注册
delegate1 -= ChineseGreeting;  //取消注册

应用:

public delegate void BoilHandler(int param);   //声明委托
public event BoilHandler BoilEvent;        //声明事件

从中可以判断是否进行了注册,如果有在调用事件(相当于就调用了委托,也相当于调用了注册对象的方法)

 if (BoilEvent != null)
    { //如果有对象注册
           BoilEvent(temperature);  //调用所有注册对象的方法
    }
发布了131 篇原创文章 · 获赞 17 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/lclcsdnblink/article/details/104020073