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

【前言】

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

【C#委托】

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

       1、委托的声明原型

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

       例子:

       

//定义了一个委托CheckDelegate,它可以注册返回void类型且有一个int作为参数的函数
public delegate void CheeckDelegate(int number);

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

       2、委托的实例化

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

       例子:

       

//用函数CheckMod实例化上面的CheckDelegate 委托为_checkDelegate
CheckDelegate _checkDelegate=new CheckDelegate(CheckMod);

       3、泛型委托

       委托也支持泛型的使用

       泛型委托原型:

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

       例子:

       

delegate T2 A
  
  
   
   (T1 t);//定义有两个泛型(T1,T2)的委托,T2作为委托函数返回类型,T1作为委托函数参数类型

static int test(int t)
{
   return t;
}

static void Main(string[] args)
{
    //将泛型委托委托
   
   
    
    实例化为
    
    
     
     ,即表示有一个int类型参数且返回类型是int的函数,所以将test用来实例化委托
    A
     
     
      
       a =test;
    Console.WriteLine(a(5));//输出5
}
     
     
    
    
   
   
  
  

【C#事件】

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

       1、通过事件使用委托

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

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

        2、声明事件(Event)

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

        

public delegate void BoilerLogHandler(string status);

//声明事件本身,使用event关键字
public event BoilerLogHandler BollerEventLog;

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

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值