zoukankan      html  css  js  c++  java
  • C# 委托和事件的区别

    主要区别:1.事件在类外绑定事件只能用“+=”(“-=”解绑),不能使用‘=’绑定;如果在类内部绑定事件可以用‘=’;  

         2.委托在类内类外都可以用"+="、"-="、"=";

         3.事件的调用(执行)只能在类内调用;委托(公有)在类内类外都可以调用

    例子:

    class A
    {
      public delegate void FunHandleEvent();
      public FunHandleEvent funHandleEvent;

      public event FunHandleEvent FunEvent;

      public A() {

        //通过事件绑定方法
        FunEvent = FunA;
      }

      //调用事件

      public void Fun()
      {
        if (FunEvent != null)
        {
          FunEvent();
        }
      }

      private void FunA()
      {
        Console.WriteLine("FUNA");
      }

    }

    class B
    {
      public B() { }

      public B(A a)
      {

                //A类外绑定方法
        a.FunEvent += FunB;
      }

      private void FunB()
      {
        Console.WriteLine("FUNB");
      }


      public void FunC()
      {
        Console.WriteLine("FUNC");
      }

    }

    main:

    static void Main(string[] args)
    {
      A a = new A();
      B b = new B(a);

      //事件只能在类内部调用,而委托可以在类外调用
      //事件在类外部绑用+= -=,不能用=,在内部可以用=;
      a.FunEvent += b.FunC;
      a.Fun();//通过方法间接调用事件

      a.funHandleEvent = b.FunC;//通过委托绑定方法
      a.funHandleEvent();//直接调用委托


      Console.ReadKey();
    }

  • 相关阅读:
    BZOJ 1001: [BeiJing2006]狼抓兔子
    BZOJ 1031: [JSOI2007]字符加密Cipher
    BZOJ 1083: [SCOI2005]繁忙的都市
    BZOJ 1034: [ZJOI2008]泡泡堂BNB
    BZOJ 1040: [ZJOI2008]骑士
    BZOJ 1026: [SCOI2009]windy数
    BZOJ 1022: [SHOI2008]小约翰的游戏John
    BZOJ 1018: [SHOI2008]堵塞的交通traffic
    BZOJ: 2819 Nim
    bzoj 3144
  • 原文地址:https://www.cnblogs.com/darkif/p/10072093.html
Copyright © 2011-2022 走看看