C#里事件和委托的区别

事件和委托
事件可以理解为现实生活中发生的各种事情,例如老板拿了一堆文件放到秘书办公桌上,对秘书说帮我处理完这写报表,这就形成了一个委托,老板委托秘书帮他完成一份工作,

事实这份工作他也许已经早在以前就教给秘书怎么做了,但这次他还是交给秘书做尽管他自己可以做,代码表示一下:

using System;
public class SamplesDelegate  {
   public delegate String myMessionDelegate( string myFile );
   public class mySampleClass  {
      public String myWordFile( string myFile )  {
         if ( myFile == "会议报告" )
            return( "修改错别字并润色一下" );
         if ( myInt == "项目调研" )
            return( "修改错别字并转发给项目经理" );
         return ( "修改错别字" );
      }
      public static String myFileSign ( string myFile )  {
         if ( myFile ="会议报告" )
            return( "会议" );
         if ( myFile ="项目调研" )
            return( "项目" );
         return ( "一般文件" );
      }
   }
   public static void Main()  {
      mySampleClass mySC = new mySampleClass();
      myMessionDelegate myD1 = new myMessionDelegate( mySC.myWordFile);
      myMessionDelegate myD2 = new myMessionDelegate( mySampleClass.myFileSign );
      Console.WriteLine( "{0} 修改方法 {1}; 类型\"{2}\".", "会议报告", myD1( "会议报告"), myD2( "会议报告" ) );
      Console.WriteLine( "{0} 修改方法 {1}; 类型\"{2}\".", "项目调研", myD1( "项目调研"), myD2( "项目调研" ) );
      Console.WriteLine( "{0} 修改方法 {1}; 类型\"{2}\".", "一般文件", myD1( "一般文件" ), myD2( "一般文件" ) );
   }

}

秘书接到文件后 判断文件类型 并 回忆 老板交给他的处理方法并进行 处理 -------------------------------------------
using System;
namespace 委托
{
  delegate int NumOpe(int a,int b); //委托声明
  class Class1
  {
    static void Main(string[] args)
    {
      Class1 c1 = new Class1();
      NumOpe p1 = new NumOpe(c1.Add); //委托实例化
      Console.WriteLine(p1(1,2)); //委托调用
      Console.ReadLine();
    }
    private int Add(int num1,int num2)
    {
      return(num1+num2);
    }
  }
}

例中,委托NumOpe引用了方法Add。委托声明了以后,就可以象类一样进行实例化,实例化时把要引用的方法(如:Add)做为参数,这样委托和方法就关联了起来,就可以用委托来引用方法了。委托和所引用的方法必须保持一致:1、参数个数、类型、顺序必须完全一致。2、返回值必须一致。在来一个-------------------
using System; 
namespace event_test 
{ 
     class DelegateEvent 
     { 
         public delegate void MyDelegate(); 
         public event MyDelegate NotifyEveryOne; 
         public void Notify() 
         { 
              if(NotifyEveryOne != null) 
              { 
                   System.Console.WriteLine("引发了事件!"); 
                   NotifyEveryOne();  //事件通知委托对象,委托对象调用实例化时作为参数的方法. 
              } 
         } 
     } 
     class clsA 
     { 
         public void DispMethodA() 
         { 
              System.Console.WriteLine("已经把事件NotifyEveryOne通知到ClassA!"); 
         } 
     } 
     class clsB 
     { 
         public void DispMethodB() 
         { 
              System.Console.WriteLine("已经把事件NotifyEveryOne通知到ClassB!"); 
         } 
     } 
     class clsTest 
     { 
         [STAThread] 
         static void Main(string[] args) 
         { 
              // 首先实例化一个事件源对象。 
              DelegateEvent eventSource = new DelegateEvent();               
              // 实例化事件的订户 
              clsA objA = new clsA(); 
              clsB objB = new clsB();   
              // 使用委托把对象及其方法注册到事件中 
              eventSource.NotifyEveryOne +=new event_test.DelegateEvent.MyDelegate(objA.DispMethodA); 
              eventSource.NotifyEveryOne +=new event_test.DelegateEvent.MyDelegate(objB.DispMethodB); 
              eventSource.Notify(); 
         } 
     } 
}


文章转载自C#里事件和委托有什么区别啊??
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值