事件和委托
事件可以理解为现实生活中发生的各种事情,例如老板拿了一堆文件放到秘书办公桌上,对秘书说帮我处理完这写报表,这就形成了一个委托,老板委托秘书帮他完成一份工作,
事实这份工作他也许已经早在以前就教给秘书怎么做了,但这次他还是交给秘书做尽管他自己可以做,代码表示一下:
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();
}
}
}