事件委托使用步骤与顺序

来源:互联网 发布:网络炒作的社会影响 编辑:程序博客网 时间:2024/06/11 14:06

 

也许明白了委托的特点后,你会发现它其实还是瞒有用的的:1 多播(Mulit Cast)2 异步操作 (Async)


 

实际的委托用处1、跨线程调用窗体控件必须使用委托。2、子窗体父窗口动态传值的情况需要用到委托3、多线程同步的时候需要用到委托4、自定义事件的时候必须用到委托……用长了你就会发现委托非常好用也很有用处,感触就是另一段代码需要让这一段代码执行而不是执行这一段代码的时候要用到委托。

委托 delegate是只有一个函数的特殊的类
委托对象的引用相当函数指针
delegate 声明定义一种引用类型,该类型可用于将方法用特定的签名封装。委托实例封装静态方法或实例方法。委托大致类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的。
委托使您得以将函数作为参数传递。委托的类型安全要求作为委托传递的函数拥有同委托声明相同的签名
使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给某个方法,而不必在编译时知道将调用哪个方法。与 C 或 C++ 中的函数指针不同,委托是面向对象、类型安全的
委托声明定义一种类型,它用一组特定的参数以及返回类型封装方法。对于静态方法,委托对象封装要调用的方法。对于实例方法,委托对象同时封装一个实例和该实例上的一个方法。如果您有一个委托对象和一组适当的参数,则可以用这些参数调用该委托。
委托的一个有趣且有用的属性是,它不知道或不关心自己引用的对象的类。任何对象都可以;只是方法的参数类型和返回类型必须与委托的参数类型和返回类型相匹配。这使得委托完全适合“匿名”调用
 class Program
    {
        delegate bool CompareOp(int v1, int v2);
        static void Main(string[] args)
        {
            CompareOp less = new CompareOp(Program.Less);
            Console.WriteLine(less(1, 2).ToString());
            Console.WriteLine("Test Delegate");
            Console.ReadLine();
        }
        static public bool Less(int a, int b)
        {
            return a < b;
        }
    }

//2
delegate void MyDelegate(int i);
class Program
{
  public static void Main()
  {
    TakesADelegate(new    MyDelegate(DelegateFunction));
  }
  public static void TakesADelegate(MyDelegate SomeFunction)
  {
     SomeFunction(21);
   }
  public static void DelegateFunction(int i)
  {
     System.Console.WriteLine("Called by delegate with number: {0}.", i);
   }
}


事件:事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的。引发事件的对象称为事件发送方。捕获事件并对其作出响应的对象叫做事件接收方。

在事件通信中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件。所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)。.NET Framework 定义了一个特殊的类型(Delegate),该类型提供函数指针的功能。

委托:委托是可保存对方法的引用的类。与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。这样,委托就等效于一个类型安全函数指针或一个回调。


事件的实现就是一个函数,而委托的定义关键地方就说委托是函数指针,那么指向这个事件实现的函数指针就可以理解为委托而事件就是通过委托来动作的,下面给出事件的产生通过委托来动作的步骤:

1:首先定义委托

public delegate void dele();

实际上就是定义了一个函数指针,从这个定义看出这个函数是返回值类型为void的无参数的函数;

2:定义事件

public Event dele event;

定义了事件,事件的类型就是这个委托。

3:定义事件动作

public void EventOperator()

{

System.Windows.Forms.MessageBox("事件动作!");

}

4:将事件与动作关联(介质就是委托哦)

event +=new dele(EvventOperator);

5:触发事件

event ();

结果就是弹出MesssageBox显示“事件动作”!

同一个事件动作可以对应多个事件,只需要将这些事件委托(看到了吧委托这个词多么的形象:))到这个事件动作上就可以,当这些事件发生的时候都会触发这个动作。 

原创粉丝点击