C#里事件和委托的区别
2015-01-04 10:30
441 查看
事件和委托 事件可以理解为现实生活中发生的各种事情,例如老板拿了一堆文件放到秘书办公桌上,对秘书说帮我处理完这写报表,这就形成了一个委托,老板委托秘书帮他完成一份工作, 事实这份工作他也许已经早在以前就教给秘书怎么做了,但这次他还是交给秘书做尽管他自己可以做,代码表示一下: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#里事件和委托有什么区别啊??
相关文章推荐
- c# 中委托于事件区别
- c#之委托和事件的区别
- c# 委托 和 事件 的区别
- 快速理解C#高级概念(二) 事件与委托的区别
- C#中委托和事件的区别实例解析
- 快速理解C#高级概念(二) 事件与委托的区别
- 通过IL分析C#中的委托、事件、Func、Action、Predicate之间的区别与联系
- C#与C++的区别(三) 委托与事件
- C#事件与委托的区别
- C#中委托和事件的区别
- C#事件与委托,事件与回调的用法区别
- C#事件委托和回调的用法区别
- 通过IL分析C#中的委托、事件、Func、Action、Predicate之间的区别与联系
- C#事件与委托的区别
- C# 事件和委托区别
- C#中委托和事件的区别实例解析
- C#中委托、事件和回调函数区别与联系
- 快速理解C#高级概念事件与委托的区别
- 重温C#2.0之委托(delegate,Delegate,MulticastDelegate)与事件(event)区别
- C#一些知识点:委托和事件的区别