【C#】C#中的委托与事件

来源:互联网 发布:godaddy 转入阿里云 编辑:程序博客网 时间:2024/05/29 03:23

【前言】

       小编近期在学习设计模式,在学习观察者模式的时候,遇到了一个问题,不太理解事件委托在观察者模式中怎么用,于是又发现自己其实是对事件委托这个东西不太理解,于是深入了解了一下C#中的委托与事件。下面来给大家介绍一下C#中的委托与事件

【C#委托】

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

       1、委托的声明原型

       delegate<函数返回类型><委托名>(<函数参数>)

       例子:

       

        这样就定义了一个委托,但是委托在.net内相当于声明了一个类,,类如果不实例化为对象,很多功能是没有办法使用的,委托也是如此

       2、委托的实例化

       原型:<委托类型> <实例化名>=new <委托类型>(<注册函数>)

       例子:

       

       3、泛型委托

       委托也支持泛型的使用

       泛型委托原型:

       delegate<T1><委托名><T1,T2,T3...>(T1 t1,T2 t2,T3 t3...)

       例子:

       

【C#事件】

       事件(Event) 基本上说是一个用户操作,如按键、点击、鼠标移动等等,或者是一些出现,如系统生成的通知。应用程序需要在事件发生时响应事件。例如,中断。事件是用于进程间通信。

       1、通过事件使用委托

       事件在类中声明且生成,且通过使用同一个类或其他类中的委托与事件处理程序关联。包含事件的类用于发布事件。这被称为发布器(publisher) 类。其他接受该事件的类被称为 订阅器(subscriber) 类。事件使用发布-订阅(publisher-subscriber) 模型。

       发布器(publisher) 是一个包含事件和委托定义的对象。事件和委托之间的联系也定义在这个对象中。发布器(publisher)类的对象调用这个事件,并通知其他的对象。

        2、声明事件(Event)

        在类的内部声明事件,首先必须声明该事件的委托类型。例如:

        

        上面的代码定义了一个名为BoilerLogHandler的委托和一个名为BoilerEventLog的事件,该事件在生成的时候会调用委托

0 0